JavaScript -- 设计模式 创建型设计模式-单例模式

单例模式确保一个类只有一个实例,通过全局访问点提供。在JavaScript中,由于缺乏private关键字,需要采用特定技巧实现。常用于购物车、登录框、状态管理如Redux和Vuex的store。本文探讨如何在JS中模拟单例模式,同时强调其遵循单一职责原则并保持开放封闭特性。
摘要由CSDN通过智能技术生成

单例模式:确保一个类仅有一个实例,并提供一个访问它的全局访问点。

比如购物车,登录框,redux和vuex的store 等这些都是单例模式,我下来看一下单例模式的UML类图。

一个私有化属性instance用来保存唯一实例,私有化构造函数防止其他对象可以通过new运算符来生成新对象,一个共有的函数提供全局访问点,其他对象想要使用Singleton实例 必须调用它才行。

很遗憾的是,JS没有private关键字,也就是说我们不能正常的像JAVA,C#那样使用单例模式,但是我们可以用其他方法写一个假的单例模式。

class CreateSingleton {
    constructor(name) {
        this.name = name;
    }
    speak() {
        console.log(`I am ${this.name}`);
    }
}

const Singleton = (function () {
    let instance = null;
    return function (name) {
        if (!instance)  instance = new CreateSingleton(name);
        return instance
    }
})();

const p1 = new Singleton("cyl");
const p2 = new Singleton("lyc");
p1.speak();
p2.speak();
console.log(p1 === p2)

我们还可以使用其他方法。

class Singleton {
    constructor(name) {
        this.name = name;
    }
}

Singleton.getInstance = (function () {
    let instance = null;
    return function (name) {
        if (!instance) {
            instance = new Singleton(name);
        }
        return instance;
    }
})();

const p1 = Singleton.getInstance("cyl");
const p2 = Singleton.getInstance("lyc");

console.log(p1 === p2);

单例模式符合单一职责而且没有违背开放封闭。

大家可以看左边个人分类的目录,跟着一起学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值