Skip to content

设计模式

🕒 Published at:

面向对象设计原则

js中常见的只有SO,即单一功能原则和开放封闭原则

面向对象设计原则,通常指的是SOLID原则:

  1. 单一功能原则(SRP):每个类只关注与实现一个功能。SRP 鼓励将一个类拆分成更小的、更具体的类,每个类专注于一个单一的功能或职责。

  2. 开放封闭原则(OCP):对单一原则的扩展,每个类应该对扩展开放,对修改关闭,当我们需要改变(扩展)它的行为时,应该添加代码来完成。通过遵循 OCP 原则,可以保持系统的稳定性和可维护性,同时减少对现有代码的影响。

  3. 里式替换原则(LSP): 每个子类必须能重写其基类而不影响程序运行。LSP 原则是继承关系的基础,它确保了继承关系的正确性和可靠性。

  4. 接口隔离原则(ISP):一个类不应该强迫其用户(客户端)实现一些其不需要的方法。相反,应该将接口分解成更小的、更具体的接口,使得客户端只依赖于它们需要的接口。通过遵循 ISP 原则,可以减少类之间的耦合度,提高系统的灵活性和可维护性。

  5. 依赖反转原则(DIP):DIP 原则要求高层模块不应该依赖于低层模块,二者都应该依赖于抽象。同时,抽象不应该依赖于具体的实现细节,而实现细节应该依赖于抽象。通过遵循 DIP 原则,可以实现模块之间的松耦合,提高系统的灵活性和可测试性。

工厂模式

工厂模式主要是封装对象的创建过程,客户端仅需要调用工厂就可以得到它想要的对象,通常有以下几种变体:

  • 简单工厂模式:只有一个厂(类),根据不同的参数返回不同的产品(对象)

  • 工厂方法模式:一个代工厂(类),提供接口,子类实现具体接口,通过调用不同的接口返回不同的产品(对象)

  • 抽象工厂模式:与工厂方法类似,唯一的区别就是子类是创建一组相互依赖/关联的对象

发布订阅模式

维护一个消息队列,

发布者把消息发送到消息队列中,

订阅者从消息队列中订阅想要的消息,

消息队列再将消息分发给订阅者

观察模式

订阅者直接从发布者身上订阅消息

例如:

dep存储了多个watcher,

相当于多个watcher订阅了dep,

watcher在观察dep的变化

单例模式

一个类只有一个示例,无论创建多少次都是同一个实例

例如useRef

也有一些伪单例,例如vuex,可以创建多个store(违反了单例模式),但是只能有一个vuex注入到vue中(保障了唯一性)

javascript
class Singleton {
    constructor() {
        if (!Singleton.instance)Singleton.instance = this;
        return Singleton.instance;
    }

    static getInstance() {
        if (!Singleton.instance) Singleton.instance = new Singleton();
        return Singleton.instance;
    }
}

const a=new Singleton()
const b=new Singleton()
a===b //true