设计模式之单例模式

说明:只要实例化一次,超过一次的实例化过程会返回之前实例化的结果,而不会在内存中再次写入新的实例对象。----类似于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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,540评论 1 8
  • 单例模式(Singleton Pattern)是最简单的一种设计模式。下面让我们开始学习单例模式。 一、基本介绍 ...
    冰鉴IT阅读 1,123评论 1 19
  • 概述 单例模式是应用最广的模式之一,在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要...
    刘涤生阅读 1,038评论 0 5
  • 最近学习了Java的几种常规的设计模式,内容较多,思维方式多种多样,故将所学整理一下,写成博客,分享并加深自己的理...
    Airing阅读 861评论 1 10
  • 一.什么是单例模式 单例模式的定义:确保一个类只有一个实例,并提供一个访问他的全局访问点。单例模式是几个设计模式中...
    Geeks_Liu阅读 2,247评论 0 10