【javascript设计模式】4.单例模式

⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展博主创作的 《前端面试复习笔记》(点击订阅),广受好评,已帮助多人提升实力、拿到 offer。现在订阅,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见!

Singleton 单例模式

单例模式,能够限制类的实例化次数只能为一次。单例模式,在该实例不存在的情况下,
可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用;

示例:

<script type="text/javascript">
	var mySingleton = (function () {
		//实例保持了singleton 的一个引用
		var instance;
		function init() {
			//singleton
			//私有方法和变量
			function privateMethod() {
				console.log("I am private");
			}
			var privateVariable = "I am also private";
			var privateRandomNumber = Math.random();
			return {
				//公有方法和变量
				publicMethod: function () {
					console.log("The public can see me!");
				},
				publicProperty: "I am also public",
				getRandomNumber: function() {
					return privateRandomNumber;
				}
			};
		};
		return {
			//获取singleton 的实例,如果存在就返回,不存在就创建新实例
			getInstance: function() {
				if(!instance) {
					instance = init();
				}
				return instance;
			}
		};
	})();

	var singleA = mySingleton.getInstance();
	var singleB = mySingleton.getInstance();
	console.log(singleA.getRandomNumber()===singleB.getRandomNumber());//true
</script>

在实践中,当在系统中确实需要一个对象来协调其他对象时,>Singleton模式很有用。

示例:

<script type="text/javascript">
	var SingletonTester = (function() {
		//options: 包含singleton所需配置信息的对象
		//var options = {name:"test",pointX:5};
		function Singleton(options) {
			//如果未提供options,则设置为空对象
			options = options || {};
			//为singleton设置一些属性
			this.name = "SingletonTester";
			this.pointX = options.pointX || 6;
			this.pointY = options.pointY || 10;
		}
		//实例持有者
		var instance;
		//静态变量和方法的模拟
		var _static = {
			name: "SingletonTester",
			//获取实例的方法,返回singleton对象的singleton实例
			getInstance: function(options) {
				if(instance === undefined) {
					instance = new Singleton(options);
				}
				return instance;
			};
			return _static;
		}
	})();
	var singletonTest = SingletonTester.getInstance({
		pointX: 5
	});
	console.log(singletonTest.pointX);//5
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程轨迹_

期望和你分享一杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值