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)

  

posted @ 2016-02-18 11:19  倾其一生  阅读(76)  评论(0编辑  收藏  举报