JavaScript常用设计模式--单例模式

175 阅读1分钟

单次模式(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();
}