单例模式简介&三种实现方式

2018, Oct 19    

单例模式

单例模式也称作为单子模式,更多的也叫做单体模式。为软件设计中较为简单但是最为常用的一种设计模式 在应用单例模式时,生成单例的类必须保证只有一个实例的存在,很多时候整个系统只需要拥有一个全局对象,才有利于协调系统整体的行为。比如在整个系统的配置文件中,配置数据有一个单例对象进行统一读取和修改,其他对象需要配置数据的时候也统一通过该单例对象来获取配置数据,这样就可以简化复杂环境下的配置管理。

单例模式的思路

一个类能返回一个对象的引用(并且永远是同一个)和一个获得该实例的方法(静态方法,通常使用getInstance名称)。那么当我们调用这个方法时,如果类持有的引用不为空就返回该引用,否者就创建该类的实例,并且将实例引用赋值给该类保持的那个引用再返回。同时将该类的构造函数定义为私有方法,避免其他函数使用该构造函数来实例化对象,只通过该类的静态方法来得到该类的唯一实例。

方法1

var singleton = {
        attr : 1,
        method : function(){ return this.attr; }
    }
var t1 = singleton ;
var t2 = singleton ;

方法2

function Construct(){
    // 确保只有单例
    if( Construct.unique !== undefined ){
        return Construct.unique; 
    }
    // 其他代码
    this.name = "NYF";
    this.age="24";
    Construct.unique = this;
}
var t1 = new Construct() ;
var t2 = new Construct() ;

方法3

var single = (function(){
    var unique;
    function Construct(){
        // ... 生成单例的构造函数的代码
    }
    unique = new Constuct();
    return unique;
})();
var t1 = single;
var t2 = single;