JavaScript中的单例模式:从闭包到class实现
🧑🏫 作者:全栈老李
📅 更新时间:2025 年 5 月
🧑💻 适合人群:前端初学者、进阶开发者
🚀 版权:本文由全栈老李原创,转载请注明出处。
单例模式就像小区里唯一的快递柜——无论你从哪个门进去,看到的都是同一组柜子。作为全栈老李,今天要带大家深入这个看似简单却暗藏玄机的设计模式。
什么是单例模式?
想象你开发一个全局状态管理器,如果每次调用都new一个新实例,那数据同步会乱成一锅粥。单例模式的核心就是确保一个类只有一个实例,并提供全局访问点。在JavaScript这种没有真正"私有"概念的语言里,实现起来特别有意思。
先看个生活例子:公司里的打印机服务。如果每个部门都自己new一个打印机实例,耗材管理会疯掉。正确的做法是让整个公司共享同一个打印机服务实例——这就是单例的典型场景。
闭包实现:最经典的JS方式
// 全栈老李的单例模式闭包实现
const Singleton = (function() {
let instance; // 闭包保存的私有变量
function createInstance() {
const object = new Object("我是全栈老李创建的实例");
return object;
}
return {
getInstance: function() {
if (!instance) {
instance = createInstance();
}
return instance;
}
};
})();
// 使用示例
const instance1 = Singleton.getInstance();
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2