JavaScript设计模式6单例模式
单例模式的定义:保证一个类只有一个实例,并且提供一个可以访问它的全局访问点。
以类为中心的传统面向对象语言的单例模式实现:
普通单例模式:
var Singleton = function(name){
this.name = name;
this.instance = null;
}
Singleton.prototype.getName = function(){
alert(this.name)
}
Singleton.getInstance = function(name){
if( !this.instance ){
this.instance = new Singleton(name)
}
return this.instance;
}
var a = Singleton.getInstance("sven1")
var b = Singleton.getInstance('sven1')
alert(a === b)
//透明的单例模式,用户可以像正常创建对象那样创建单例.
var createDiv = (function(){
var instance = null;
var createDiv = function(html){
if(instance){
return instance
}
this.html = html;
this.init()
return instance = this;
}
createDiv.prototype.init = function(){
var div = document.createElement('div')
div.innerHTML = this.html;
document.body.appendChild(div)
}
return createDiv;
})()
var a = new createDiv('sven')
var b = new createDiv('sven')
alert(a == b)
//使用代理实现单例
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 proxySingleCreateDiv = (function(){
var instance;
return function(html){
if(!instance){
instance = new CreateDiv(html)
}
return instance;
}
})()
var a = new proxySingleCreateDiv('sven')
var b = new proxySingleCreateDiv('sven')
javascript中单例模式实现:
// 封装单例逻辑
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)
Think Different, Make Different-编程是一个习惯

浙公网安备 33010602011771号