JavaScript设计模式---单例模式

单例模式确保一个类只有一个实例,并提供全局访问点。它延迟初始化,直到第一次需要时才创建对象,节省了资源。单例模式常用于需要频繁实例化然后销毁的对象,或者昂贵的资源管理等场景。

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

单例模式之所以这么叫,是因为它限制一个类只能有一个实例化对象。经典的实现方式是,创建一个类,这个类包含一个方法,该方法在没有对象存在时,将会创建一个新的实例对象。如果对象存在,这个方法只是返回这个对象的引用。

let singleton = (() => {
	let instance;
	function init() {
		// 私有变量和方法
		let privateString = 'I am private';
		function privateMethod() {
			console.log('I am a private method');
		}
		// 公有变量和方法
		return {
			publicString: 'I am public',
			publicMethod: () => {
				console.log('I am a public method');
			}
		};
	}
	let _value = {
        // 如果存在获取此单例实例,如果不存在创建一个单例实例
		getInstance: () => {
			if (!instance) {
				instance = init();
			}
			return instance;
		}
	};
	return _value;
})();
let myInstance = singleton.getInstance();
console.log(myInstance.publicString);
myInstance.publicMethod();

如果需要扩展这个唯一的实例,可以重新定义获取实例的方法

singleton.getInstance = () => {
    if (!this._instance) {
        if (isFoo) {
            this._instance = new FooSingleton();
        } else {
            this._instance = new BasicSingleton()
        }
    }
}

为什么需要单例模式,而不是直接定义一个静态对象

const object = {
    publicString: 'I am public',
    publicMethod: () => {
        console.log('I am a public method');
    }
}

因为单例可以懒构造,在真正用到之前(调用getInstance()之前),单例模式不需要分配资源或者内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值