单例模式
TIP
JavaScript 单例模式是一种限制类实例化次数的设计模式,可以确保一个类只有一个实例,并提供对该实例的全局访问点。
以下是一个简单的 JavaScript 单例模式示例:
javascript
// 单例对象
const mySingleton = (function () {
// 实例引用
let instance;
function init() {
// 私有方法和变量
function privateMethod() {
console.log("I am private!");
}
const privateVariable = "I'm also private";
return {
// 公共方法和变量
publicMethod: function () {
console.log("The public can see me!");
},
publicProperty: "I am also public",
// 获取单例实例方法
getInstance: function () {
if (!instance) { // 如果没有实例,则创建一个新实例
instance = init();
}
return instance;
},
};
}
return {
// 获取单例实例方法
getInstance: function () {
if (!instance) {
instance = init();
}
return instance;
},
};
})();
// 创建单例实例
const singletonInstance1 = mySingleton.getInstance();
const singletonInstance2 = mySingleton.getInstance();
console.log(singletonInstance1 === singletonInstance2); // true,两个实例相同
在上面的示例中,我们定义了一个单例对象 mySingleton
,它包含了私有成员和公有成员。其中,私有成员被封装在 init
函数内部,并通过闭包的方式返回,以便外部无法访问。
为了确保该单例只被实例化一次,我们使用了一个 instance
变量来存储实例引用。当第一次调用 getInstance
方法时,会检查 instance
是否存在。如果不存在,则创建一个新的实例,否则直接返回现有的实例。
最后,我们通过调用 mySingleton.getInstance
两次来测试单例模式是否有效。由于两个实例相同,因此比较它们的引用会得到 true
的结果。
TIP
单例模式的优点是可以确保全局只有一个实例,并提供对该实例的全局访问点,从而方便地共享状态和资源。