Proxy代理实现单例模式

单例模式概念:vue

单例模式,属于建立类型的一种经常使用的软件设计模式。经过单例模式的方法建立的类在当前进程中只有一个实例es6

不懂Proxy的能够先看这两篇文章面试

MDN设计模式

阮一峰老师出的es6函数

使用的拦截器:construct(target, args):拦截 Proxy 实例做为构造函数调用的操做ui

construct方法用于拦截new命令spa

construct方法返回的必须是一个对象,不然会报错。设计

好了废话很少说,下面直接上代码(你的时间不宝贵,个人时间还宝贵了)代理

function singletonProxy (className) {
  let instance = null
  return new Proxy(className, {
    construct (target, args) {
      // 内部类
      class ProxyClass {
        constructor () {
          if (instance === null) {
            instance = new target(...args)
          }
          return instance
        }
      }
      return new ProxyClass()
    }
  }) 
}

// 示例
class A {
  constructor () {
  
  }
  run () {
    console.log(1)
  }
}
// 代理A类实现单例模式
let AP = singletonProxy(A)
let ap1 = new AP()
let ap2 = new AP()
// ap1 === ap2 >>> true
复制代码

掘金其余技术人员的实现模式,我以为奇怪的是竟然没有人发现,难道大家都不重视设计模式

不懂设计模式面试的时候code

面试官:会使用vue吗

我:会

面试官:知道vue的源码怎么实现的吗

我:知道

我:使用 Object.defineProperty() 方法,而后吧唧吧唧一大堆

面试官:停,vue里面使用了什么设计模式,这些模式有什么特色,怎么实现

我: 。。。。。

相关文章
相关标签/搜索