单例模式: 保证一个类仅有一个实例,并提供一个访问它的全局访问点
用代理实现单例模式
应用场景:
使用 CreateDiv 单例类,它的作用是负责在页 面中创建唯一的 div 节点
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 );
};
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
复制代码
惰性单例
指的是在需要的时候才创建对象实例。惰性单例是单例模式的重点
应用场景:
创建唯一的浮窗
var getSingle = function( fn ){var result;return function(){return result || ( result = fn .apply(this, arguments ) );}
};
var createLoginLayer = function(){var div = document.createElement( 'div' );div.innerHTML = '我是登录浮窗';div.style.display = 'none'; document.body.appendChild( div );return div;
};
var createSingleLoginLayer = getSingle( createLoginLayer );
document.getElementById( 'loginBtn' ).onclick = function(){ var loginLayer = createSingleLoginLayer(); loginLayer.style.display = 'block';
};
复制代码
系列文章:
《JavaScript设计模式与开发实践》最全知识点汇总大全