序、设计模式分类
一、装饰者模式(原型链)
二、策略模式
三、代理模式
四、发布订阅模式
五、迭代器模式
六、工厂模式
七、外观模式
八、状态模式
九、单例模式
十、适配器模式
一、概述
单例模式就是不用重复去构建实例,直接取之前创建过的那个保存在内存中的实例,之前看 element
写的ui组件loading,也是单例模式。
1. ES6 Static关键字实现
class SingleObject {
static #instance = null;
login() { console.log('登陆') }
static getInstance() {
if (!SingleObject.#instance) {
SingleObject.#instance = new SingleObject();
}
return SingleObject.#instance;
};
}
let singleObject1 = SingleObject.getInstance();
let singleObject2 = SingleObject.getInstance();
console.log(singleObject1 == singleObject2);
2. ES6 Class/Static + 闭包实现
class SingleObject {
login() { console.log('登陆') }
static getInstance() {
(function(){
let instance;
if(!instance) {
instance = new SingleObject();
}
return instance;
})()
};
}
let singleObject1 = SingleObject.getInstance();
let singleObject2 = SingleObject.getInstance();
console.log(singleObject1 == singleObject2);
3. ES5 + 闭包实现
function SingleObject () { }
SingleObject.getInstance = (function() {
let instance = null;
return function() {
if(!instance) instance = new SingleObject()
return instance;
}
})()
let singleObject1 = SingleObject.getInstance();
let singleObject2 = SingleObject.getInstance();
console.log(singleObject1 == singleObject2);