Javascript 设计模式之单例模式

单例模式就如其名一样,一个构造函数在构造出一个对象后,之后再使用这个构造函数构造对象时,不会是新的对象,依旧是上一次的对象,通俗点说,单例模式实现的是一个构造函数只能创造一个新的对象。很不解,为什么要这么做?这个就像什么呢,举个不恰当的例子,就像一家汽车制造厂,在制造完一辆车之后,宣布不再造新车了,之后公司要改型,改成只针对这辆车做维护(维修)的公司。

  教科书解释:

  • 创建完之后,只有一个实例,之后再怎么创建,都是这一个,方便实例管理,提供了对实例的受控访问。
  • 对于频繁创建,销毁对象,这个单例模式实现了对象统一,内存只占有一个对象内存分量,在频繁创建中,大大的节约了系统内存。

//单例模式
var getSingle = function(fn){
	var result = null;
	return function(){
        /*
		//这里使用闭包,把result变量驻留在内存
		if(!result){
			//result = fn();//把回调函数的返回值赋给result
			//但是要解决传参问题 所以用apply或call
			result = fn.apply(this,arguments);
		}
		return result;*/

		//升级写法
		return result || (result=fn.apply(this,arguments));
	}
}
function A(name){
	this.name = name;
}
A.prototype.getName = function(){
	console.log(this.name);
}
//常用的类实例化写法

/*var a = new A('luxi');
var b = new A('jack');
a.getName();//luxi
b.getName();//jack
console.log(a==b);//false*/

//单例模式写法
var a = getSingle(function(name){
	var code = new A(name);
	return code;
})
a('luxi').getName();//luxi
a('jack').getName();//luxi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值