之所以叫单例模式就是因为他保证了不管你调用我几次,老子就输出一次实例的特点,我们用ES6语法举个简单的例子
class Per {
constructor(name) {
this.name = name;
}
static sayName(name) {
return new Per(name);
}
}
var a = Per.sayName("码不停息");
var b = Per.sayName("码不停息2");
console.log(a); // Per {name: "码不停息"}
console.log(b); // Per {name: "码不停息2"}
console.log(a === b); // false
单例模式实现的类
class Per {
constructor(name) {
this.name = name;
}
static sayName(name) {
if (!this.instance) {
this.instance = new Per(name);
}
return this.instance;
}
}
var a = Per.sayName("码不停息");
var b = Per.sayName("码不停息2");
console.log(a); // Per {name: "码不停息"}
console.log(b); // Per {name: "码不停息"}
console.log(a === b); // true
可以看出,在非单例模式下我们调用几次sayName就会new几次Per并且每次new出来的结果不相同;在单例模式下不管你调用sayName几次,都会返回第一次的结果