code设计模式-单例模式

本文详细介绍了单例模式的概念及其在JavaScript中的实现方式,包括标准单例模式、透明单例模式和其他单例写法,并提供了通用单例创建的方法。

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


1.定义:保证一个类仅有一个实例,并提供一个全局访问入口。


2.应用场景描述:比如全局缓存对象、单击登录按钮弹出的登录浮窗等。


3.单例模式实现

  • 标准单例模式
 var Singleton = function(name){
	this.name = name;
};

Singleton.prototype.getName = function(){
	return this.name;
};

Singleton.getInstance = (function(){

	var instance = null;

	return function(name){
		if(!instance){
			instance = new Singleton(name);
		}

		return instance;
	};
})();


//测试

var a = Singleton.getInstance("name1");
var b = Singleton.getInstance("name2");
console.log(a === b);//true
  • 透明单例模式,所谓“透明”就是可以像普通类一样创建对象
var Singleton = (function(){

	var instance  = null;

	var Singleton = function(name){
		if(instance){
			return instance;
		}

		this.name = name;

		return instance = this;

	};

	return Singleton;

})();

//测试

var a = new Singleton("name1");
var b = new Singleton("name2");
console.log(a === b);//true

//其他单例写法
function SingleObj(name){
	if(!SingleObj.instance){
	  this.name = name;
	  SingleObj.instance= this;
	}
	return SingleObj.instance;
}


4.通用单例创建,根据单一职责原则,把对象创建部分和单例部分分开

//单例部分
var getSingle = function(fn){
	var instance = null;

	return function(){
		return instance || (instance = fn.apply(this,arguments));
	};
}
//创建对象部分
var createObj = function(name){
	var Singleton = function(name){
		this.name = name;
	};

	Singleton.prototype.getName = function(){
		return this.name;
	};

	return new Singleton(name);
}

var getSingleton = getSingle(createObj);

//测试
var demo = getSingleton("哈哈");
console.log(demo.getName());



总结:经验帮助我们思考,不断地探究才会写出更好的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wl_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值