单例模式概念:
单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例
不懂Proxy的可以先看这两篇文章
使用的拦截器: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里面使用了什么设计模式,这些模式有什么特点,怎么实现
我: 。。。。。