首页 > Web开发 > 详细

js设计模式(一)---单例模式

时间:2017-11-07 17:29:47      阅读:223      评论:0      收藏:0      [点我收藏+]

之前有写过但是感觉不是很透彻---重新来过

单例模式:

  定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。  

应用场景:

  如果一个对像只需要被创建一次的时候就需要单例模式,例如:线程池、全局缓存、浏览器中的widow对象等。

实现:

  使用一个变量记录是否为某个类已经创建了对象,如果是,则在下次获取该类实例的时候。直接返回之前创建的对象。

// 单例模式
var Singleton = function(name){
    this.name = name;
    this.instance = null;
};// 获取实例对象
function getInstance(name) {
    if(!this.instance) {   //一旦被实例化之后就不对其进行在实例化
        this.instance = new Singleton(name);
    }
    return this.instance;
}
// 测试单例模式的实例
var a = getInstance("aa");     --->aa
var b = getInstance("bb");     --->aa
console.log(a === b) //true

你会发现创建实例的逻辑和管理单例的逻辑放在了一起;这个不符合 “单一职责“  的原则

我们改进下 使用代理的方式使用单例模式

var Singleton = function(name) {
    this.name = name;
};

var getSingleton = (function() {
    var instance;
    return function(name) {
        if (!instance) {
            instance = new Singleton(name);
        }
        return instance;
    }
})();
var a = new getSingleton(‘aa‘);
var b = new getSingleton(‘bb‘);
console.log(a === b)  //true

 虽然做了分离但是你会发现公共部分的代码还是存在

于是还而已改进为

var Singleton = function(name) {
    this.name = name;
};

var getSingle = function( fn ){
  var result;
  return function(){
    return result || ( result = fn .apply(this, arguments ) );
  }
};

var createSingle = getSingle(Singleton)
var a = createSingle(‘aa‘)
var b = createSingle(‘bb‘)

console.log(a == b)

如果你吧单例写到这种程度基本上也就差不多了

 

js设计模式(一)---单例模式

原文:http://www.cnblogs.com/web-Rain/p/7799671.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!