JavaScript中的单例模式

152 阅读1分钟

介绍

※ 系统中被唯一使用

※ 一个类只有一个实例

说明

◆ 单例模式需要用到java的特性(private)

◆ ES6 中没有(typescript除外)

◆ 只能用javascript变相实现

实现代码(ES6)

class SingLeObject {
    login() {
        console.log('login...')
    }
}

SingLeObject.getInstance = (function () {  //用闭包记住是否被实例过
    let instance                    //判断是否实例化过一次了
    return function () {
        if(!instance){
            instance = new SingLeObject();
        }
        return instance;
    }

})()

let obj1 = SingLeObject.getInstance();
obj1.login() //login...

let obj2 = SingLeObject.getInstance();
obj2.login() //login...

console.log(obj1 === obj2) //true   唯一实例

console.log('---------------------------------')
let obj3 = new SingLeObject()     //虽然可以new 这里无法控制,只能人为约束
obj3.login() //login...

console.log(obj1 === obj3)  //false 不是同一个实例

其他

◆ 购物车(和登录框类似)

◆ vuex 和 redux中的store

设计原则

● 符合单一 职责原则,只实例化唯一的对象

● 没法具体开放封闭原则,但是绝对不违反开放封闭原则