javascript单例模式(1)

作者: smartphp | 来源:发表于2016-12-17 23:23 被阅读91次

    单例(singleton).这种模式提供了一种将代码组织为一个逻辑单元的手段,可以通过单一变量来访问。通过确保单例对象只有一个拷贝,可以确保代买使用童颜的全局资源。单例可以用来划分命名空间,可以借助单例把代码组织的更为一致,从而更容易阅读和维护。

    本文参照这本书第五章,介绍的重点和另一本书好像是不同的。结合着看看    
    
    s3398900.jpg

    单例的基本结构

    最基本的就是一个对象字面量

    //对象字面量作为单体
    var Singleton = {
      attribute1: true,
      attribute2: 10,
    
      method1: function() {
    
      },
      method2: function(arg) {
    
      }
    };
    
    Singleton.attribute1 = false; //修改
    var total = Singleton.attribute2 + 5; //使用单例
    var result = Singleton.method1();```
    
    `方法位于对象字面量中就有了命名空间,和其他同名的函数就不会冲突了。对象字面量里的方法统一用  nameSpace.method的格式调用`
    对象字面量的命名空间还可以继续划分例如parent.children.method。
    这样不仅变量发生冲突的机会大大减少,而且归属更明确了。
    
    上面的对象字面量的单例是不是很眼熟? 在node程序中的配置文件config.js里面是不是都是这种代码? 配置项都是全局唯一的。
    
    #####惰性实例化
    本来单例是想写这个内容的,但是今天一看,还是没看全。曾探的js模式书里的单例其实都是这个部分。`实际的单例代码放在一个函数中,然后使用一个变量来缓存实例化的代码,如果已经实例化就直接返回缓存的代码。`
    
    

    MyNamespace.Singleton = (function() {

    var uniqueInstance; // 私有变量缓存实例化单例

    function constructor() { // 具体需要按需加载的代码.
    var privateAttribute1 = false;
    var privateAttribute2 = [1, 2, 3];

    function privateMethod1() {
      ...
    }
    function privateMethod2(args) {
      ...
    }
    
    return { // Public members.
      publicAttribute1: true,
      publicAttribute2: 10,
    
      publicMethod1: function() {
        ...
      },
      publicMethod2: function(args) {
        ...
      }
    }  }
    

    return {
    getInstance: function() {
    if(!uniqueInstance) { // 单例若不存在,调用constructor函数
    uniqueInstance = constructor(); //调用constructor函数后,缓存返回值
    }
    return uniqueInstance;
    }
    }
    })();

    相关文章

      网友评论

        本文标题:javascript单例模式(1)

        本文链接:https://www.haomeiwen.com/subject/yzdamttx.html