设计模式之单例模式

说明:只要实例化一次,超过一次的实例化过程会返回之前实例化的结果,而不会在内存中再次写入新的实例对象。—-类似于once。

需要遵守的原则:“单一职责的原则”,每一个类或者函数只负责一个功能。

最佳实践:使用代理方式实现单例模式,使用一个代理函数来实现实单例例化

原生的js代码

/* 摘自《JavaScript设计模式与开发实践》 */
var CreateDiv = function( html ){
    this.html = html;
    this.init(); 
 };
CreateDiv.prototype.init = function(){
    var div = document.createElement( 'div' ); div.innerHTML = this.html; document.body.appendChild( div );
};


 // 下来代理类 proxySingletonCreateDiv  

var ProxySingletonCreateDiv = (function(){
    var instance;
    return function( html ){
        if ( !instance ){
            instance = new CreateDiv( html );
        }
        return instance; 
    }
})();

// 测试函数
var a = new ProxySingletonCreateDiv( 'sven1' );
var b = new ProxySingletonCreateDiv( 'sven2' );
alert( a === b ); //返回true

TS版的用class实现的单例模式代码

class Singleton{
    name:string;
    constructor(name:string){
        this.name = name;
        this.init();
    }
    private init() {
        console.log("已创建");
    }
}

class ProxySingleton{
    protected static instance:any = null;
    constructor(public name:string){
        if( !ProxySingleton.instance ){
            ProxySingleton.instance = new Singleton(this.name);
        }
        return ProxySingleton.instance;
    }
}


// test
let a = new ProxySingleton("张三");
let b = new ProxySingleton("李四");
console.log(a===b); //返回true
    原文作者:沐风
    原文地址: https://segmentfault.com/a/1190000012096719
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞