单例模式

单例模式是什么 ?

通俗的讲,我们每个人在这个世界是独一无二的。而这独一无二的存在,就是单例模式的核心。

从编程的角度来看,单例模式就是某个类的一个实例对象,在当前全局运行环境中是唯一的,并且单已经存在一个实例后,再次实例化一个实例将会失败。

单例模式它的作用 ?

减少资源的占用

可以共享数据

控制资源的访问(在支持多线程的语言中)

在JS中实现单例模式 ?

其实在js中,我们在全局环境下声明一个变量,其本身就是全局唯一的,完全符合单例。

  • var instance = {
      eat(){},
      age: 18,
      name: "acwink"
    };
    

我们实现 Store 单例。

  • 单例模式设计的要点:判断是否创建过实例

所以,我们很容易就写出如代码。

  • function Store() {
    
    }
    const getIntanceStore = (function (){
      let instance = null;
      return function (){
        if (instance === null) {
          instance = new Store();
        }
    
        return instance;
      }
    });
    

这样写有什么问题呢?假设我们还有很多的类需要实现单例模式,岂不是又要复制这段逻辑了。而设计模式的原则就是将变和不变分离。上面代码我们很容易就能够区分出,实例化的类是变化的其他逻辑是不变的。修改代码

  • function Store() {
    
    }
    const proxySingalInstance = function(cl) {
      let instance = null;
      return function (){
        if (!instance) {
          instance = new cl();
        }
        return instance;
      }
    };
    
    const getIntanceStore = proxySingalInstance(Store);
    
    

通过上面代码我们不难看出,当我们需要设置某个类是单例,直接使用这个代理函数实现。

饿汉式:初始化时直接创建实例。

饿汉式:当第一次获取实例的时候在创建。