单次模式(Singleton Pattern)又称为单体模式,保证一个类只有一个实例,并提供一个访问它的全局访问点。也就是说,第二次使用同一个类创建新对象的时候,应该得到与第一次创建的对象完全相同的对象。
-
通过静态属性创建单例:
class Person{ static instance = null; constructor(name) { if(Person.instance) { return Person.instance; } Person.instance = this; this.name = name; } }let zhangsan = new Person("张三") let lisi = new Person("李四") console.log(zhangsan === lisi) // true -
通过函数创建单例(通用单例):
function createInstance(fn) { let instance; return function (...arg) { if(!instance) { instance = new fn(...arg); } return instance; } }let singlePerson = createInstance(Person) let zhangsan = new singlePerson("张三) let lisi = new singlePerson("李四") console.log(zhangsan === li) // true
-单例应用
class Dialog() {
constructor() {
let dialog = document.createElement("div");
this.dialog = dialog;
this.dialog.style.display = "none";
this.isShow = false;
}
showDialog() {
if(!this.isShow) {
this.dialog.innerHTML = "对话框";
document.body.appendchild(this.dialog);
this.dialog.style.display = "block";
this.isShow = true;
} else {
console.log("已经显示了一个")
}
}
}
let createInstanceFn = createInstance(Dialog);
let dialog1 = new createInstanceFn();
document.querySelector("button").onclick = function () {
dialog1.showDialog();
}