单例模式

介绍
  • 系统中被唯一使用
  • 一个类只有一个实例
示例
  • 登录框
  • 购物车
代码演示
class SingleObject {
    login() {
        console.log('logon...');
    }
}

SingleObject.getInstance = (function() {
    let instance;
    return function() {
        if (!instance) {
            instance = new SingleObject();
        }
        return instance;
    }
})();

let obj1 = SingleObject.getInstance();
obj1.login();
let obj2 = SingleObject.getInstance();
obj2.login();
console.log('obj1 === obj2 ', obj1 === obj2);

let obj3 = new SingleObject();  // 无法完全控制
obj3.login();
console.log('obj1 === obj3 ', obj1 === obj3);

通过这种方式,只能用规范来约束不要直接new SingleObject,因为JS没有跟JAVA一样的private修饰符来限制。
还有一种方式,是通过模块化的方式,引入一个类,然后导出getInstance()方法,这样外部就无法直接new这个类,只能通过getInstance方式来获取实例。

你可能感兴趣的:(单例模式)