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