单例模式--惰性单例

惰性单例模式在需要时才创建对象,本文通过JavaScript实现这一模式,讲解如何管理单例逻辑,并通过getSingle函数配合不同参数如createLoginLayer、createIframe等创建并返回唯一的实例,利用闭包特性保持对象的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

我们把如何管理单例的逻辑抽离出来:

var getSingle = function(fn){
	var result;
	return function(){
		return result || (fn.apply(this, arguments))
	}
}

接下来将用于创建登录浮窗的方法用参数 fn 的形式传入 getSingle,我们不仅可以传入 createLoginLayer,还能传入 createScript、createIframe、createXhr 等。之后再让 getSingle 返回 一个新的函数,并且用一个变量 result 来保存 fn 的计算结果。result 变量因为身在闭包中,它永远不会被销毁。在将来的请求中,如果 result 已经被赋值,那么它将返回这个值.

创建一个唯一的 div

var createLoginlayer = function(){
	var div = document.createElement('div');
	div.innnerHTML = '我是登陆的唯一弹窗';
	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'; 
};

再试试创建唯一的 iframe 用于动态加载第三方页面:

var createSingleIframe = getSingle( function(){     
	var iframe = document.createElement ( 'iframe' );
	document.body.appendChild( iframe );     
	return iframe; 
});
document.getElementById( 'loginBtn' ).onclick = function(){     
 	var loginLayer = createSingleIframe();    
 	loginLayer.src = 'http://baidu.com'; 
};

单例模式是一种简单但非常实 用的模式,特别是惰性单例技术,在合适的时候才创建对象,并且只创建唯一的一个。更奇妙的 是,创建对象和管理单例的职责被分布在两个不同的方法中,这两个方法组合起来才具有单例模 式的威力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值