我看到了一些如何在javascript中使用IIFE实现单例设计模式的示例,但是我想知道如何使用类实现它?
class Ex {
static getInstance() {
if (Ex.instance === null) {
Ex.instance = new Ex();
}
return Ex.instance;
}
}
Ex.instance = null;
const ex = Ex.getInstance();
console.log(ex);
虽然你可以这样做,但没有必要使用class
。大多数情况下,您只需使用普通Object
并将其视为单例:
export const MySingleton = {
init(...args) { /* */ },
method(...args) { /* do whatever you want */ }
}
然后,例如:
import {MySingleton} from './path/to/mysingleton';
MySingleton.init(1, 2, 3);
MySingleton.method();
如果你想有一个流畅的API,只需返回this
或MySingleton
对象:
export const MySingleton = {
init(...args) {
/* do some stuff */
return MySingleton;
},
...
}
结果:
import {MySingleton} from './path/to/mysingleton';
MySingleton.init(1, 2, 3).method();
javascript 中没有类:
在 ECMAScript 2015 中引入的 JavaScript 类主要是语法糖,而不是 JavaScript 现有的基于原型的继承。类语法不会向 JavaScript 引入新的面向对象的继承模型。
关键是不可能在JavaScript中定义公共或私有方法,而Singleton模式基于私有构造函数和公共访问器的封装。