#设计模式-单例模式
#单例的用途
- 全局缓存
- 浏览器的window对象
- 登录按钮的登录浮窗
- 等只需要一个的对象,不需要重复创建
#js中的单例模式
js是一种无类的语言,单例模式无需再声明一个类
#单例的原则
一个类只有一个实例,并且这个实例提供全局访问
#普通单例模式
如浏览器环境下的全局变量等就是一种单例的应用
foo变量可以在任意位置访问到,且不会被声明多次,但是会有污染全局作用域的问题。
jsvar foo = {}
#普通函数单例模式
jsfunction getSingle(fn, ...args) { let instance = null return function () { return instance || (instance = fn.apply(this, args)) } } class P { static create() { return new P() } } const createSinglePInstance = getSingle(P.create) const p1 = createSinglePInstance() const p2 = createSinglePInstance() const p3 = P.create() const p4 = P.create() console.log(p1 === p2) // true console.log(p3 === p4) // false