阅读 50

Proxy代理实现单例模式

单例模式概念:

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

不懂Proxy的可以先看这两篇文章

MDN

阮一峰老师出的es6

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

construct方法用于拦截new命令

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
复制代码

掘金其他技术人员的实现模式,我觉得奇怪的是居然没有人发现,难道你们都不重视设计模式

不懂设计模式面试的时候

面试官:会使用vue吗

我:会

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

我:知道

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

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

我: 。。。。。

关注下面的标签,发现更多相似文章
评论