美文网首页
Singleton(单例)模式

Singleton(单例)模式

作者: 舟_破浪 | 来源:发表于2017-10-22 20:18 被阅读0次

Singleton(单例)模式被熟知的原因是因为它限制了类的实例化次数。从经典意义上来说,Singleton模式,在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用。

适用性

  1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。

  2. 该唯一的实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

Singleton充当共享资源命名空间,从全局命名空间中隔离出代码实现,从而为函数提供单一访问点。

  var Car = (function() {
    var instance;
    function init () {
      // 定义私有变量
      var num = Math.random()*1000;
      // 定义私有函数
      var year = function () {
        return '2017'
      };
      return {
        // 定义公有变量
        color: 'red',
        // 定义公有方法
        logthis : function () {
          console.log('这是第' + num + '辆' + this.color + '小汽车');
        }
      }
    };
    return {
      getInstance: function () {
        // 获取singleton的实例,如果存在就返回,不存在就创建新实例
        if (!instance) {
          instance = init();
        }
        return instance;
      }
    }
  })()

  var Car1 = (function () {
    var instance;
    function init () {
      // 定义私有变量
      var num = Math.random()*1000;
      // 定义私有函数
      var year = function () {
        return '2017'
      };
      return {
        // 定义公有变量
        color: 'red',
        // 定义公有方法
        logthis : function () {
          console.log('这是第' + num + '辆' + this.color + '小汽车');
        }
      }
    }
    return {
      // 每次都创建新实例
      getInstance: function () {
        instance = init();
        return instance;
      }
    }
  })()
  var singA = Car.getInstance().logthis(); //这是第830.7471063162537辆red小汽车
  Car.getInstance().color = 'blue'; 
  var singB = Car.getInstance().logthis(); //这是第830.7471063162537辆blud小汽车

  var badsingA = Car1.getInstance().logthis(); //这是第346.70301464744324辆red小汽车
  Car1.getInstance().color = 'blue';
  var badsingB = Car1.getInstance().logthis(); //这是第584.6270761438335辆red小汽车

相关文章

网友评论

      本文标题:Singleton(单例)模式

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