单例模式想做的是,不管我们尝试去创建多少次,它都只给你返回第一次所创建的那唯一的一个实例。
class Singleton {static getInstance() {if (!Singleton.instance) {Singleton.instance = new Singleton()}return Singleton.instance}}const s1 = Singleton.getInstance()const s2 = Singleton.getInstance()// trues1 === s2
除了楼上这种实现方式之外,getInstance的逻辑还可以用闭包来实现:
Singleton.getInstance = (function() {// 定义自由变量instance,模拟私有变量let instance = nullreturn function() {// 判断自由变量是否为nullif(!instance) {// 如果为null则new出唯一实例instance = new SingleDog()}return instance}})()
可以看出,在getInstance方法的判断和拦截下,我们不管调用多少次,SingleDog都只会给我们返回一个实例,s1和s2现在都指向这个唯一的实例。
