JavaScript 实现单例模式的两种方式

单例模式:

  • 要求一个类只有一个实例化对象存在
  • 这个实例化对象必须提供一个全局对外访问方式
  • 这个实例化对象应当是私有的,不能被外界直接访问或者更改

方式1 get实现

  • 唯一实例化:判断这个对象是否存在,如果存在就返回,不再创建
  • 全局访问:静态
  • 私有:get只读,没有set,只读不写
export default class Model3 {
    constructor() { }
    static get instance() {
        if (!Model3._instance) {
            Object.defineProperty(Model3, "_instance", {
                value: new Model3()
            });
        }
        return Model3._instance;
    }
}

方式2 闭包实现

  • 唯一实例化:如果存在,返回存在,不再新建
  • 全局访问:返回一个class,class内设置静态方法getInstance
  • 私有:通过闭包实现,外部函数设置变量,内部调用这个变量
export default (function(){
    var _instance;
    return class Model1{
        static getInstance(){
            if(!_instance) _instance = new Model1();
            return _instance;
        }
    }
})();

猜你喜欢

转载自www.cnblogs.com/ltfxy/p/12339861.html