介绍
- 系统中被唯一使用
- 一个类只有一个实例
示例
- 登录框
- 购物车
代码演示
class SingleObject {
login() {
console.log('logon...');
}
}
SingleObject.getInstance = (function() {
let instance;
return function() {
if (!instance) {
instance = new SingleObject();
}
return instance;
}
})();
let obj1 = SingleObject.getInstance();
obj1.login();
let obj2 = SingleObject.getInstance();
obj2.login();
console.log('obj1 === obj2 ', obj1 === obj2);
let obj3 = new SingleObject(); // 无法完全控制
obj3.login();
console.log('obj1 === obj3 ', obj1 === obj3);
通过这种方式,只能用规范来约束不要直接new SingleObject,因为JS没有跟JAVA一样的private修饰符来限制。
还有一种方式,是通过模块化的方式,引入一个类,然后导出getInstance()方法,这样外部就无法直接new这个类,只能通过getInstance方式来获取实例。