← Back Home

单例模式

  1. JavaScript

单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。并提供一个访问它的全局访问点。

javascript中的单例模式

在javascript开发中,我们经常会把全局变量当成单例模式来使用。

var singleTon = {
	name: 'pcd',
	getName: function() {
		console.log(this.name);
	}
}
var singleTon = (function() {
	var _name = 'pcd';
	return {
		getName: function() {
			console.log(_name);
		}
	}
})();

使用代理实现单例模式

代理模式使CreateLoginLayer为一个普通的类,跟ProxyCreateLoginLayer的组合起到了单例模式的效果。

var CreateLoginLayer = function(html) {
	var div;
	div = document.createElement('div');
	div.innerHTML = html;
	div.style.display = 'none';
	document.body.appendChild(div);
}

var ProxyCreateLoginLayer = (function() {
	var instance;
	return function(html) {
		if(!instance) {
			instance = CreateLoginLayer(html);
		}
		return instance;
	}
})();

惰性单例

惰性单例是指在需要的时候才创建对象实例。

var createLoginLayer = (function() {
	var div;
	return function() {
		if(!div) {
			div = document.createElement('div');
			div.innerHTML = '我是登陆框';
			div.style.display = 'none';
			document.body.appendChild(div);
		}
		return div;
	}
})();

document.getElementById('loginBtn').onclick = function() {
	var loginLayer = createLoginLayer();
	LoginLayer.style.display = 'block';
}

程序初始加载是不会创建div实例,第一次点击loginBtn按钮后生成div实例,再次点击则不会再次生成div实例。

comments powered by Disqus