面向对象设计原则
js中常见的只有SO,即单一功能原则和开放封闭原则
面向对象设计原则,通常指的是SOLID原则:
单一功能原则(SRP):每个类只关注与实现一个功能。SRP 鼓励将一个类拆分成更小的、更具体的类,每个类专注于一个单一的功能或职责。
开放封闭原则(OCP):对单一原则的扩展,每个类应该对扩展开放,对修改关闭,当我们需要改变(扩展)它的行为时,应该添加代码来完成。通过遵循 OCP 原则,可以保持系统的稳定性和可维护性,同时减少对现有代码的影响。
里式替换原则(LSP): 每个子类必须能重写其基类而不影响程序运行。LSP 原则是继承关系的基础,它确保了继承关系的正确性和可靠性。
接口隔离原则(ISP):一个类不应该强迫其用户(客户端)实现一些其不需要的方法。相反,应该将接口分解成更小的、更具体的接口,使得客户端只依赖于它们需要的接口。通过遵循 ISP 原则,可以减少类之间的耦合度,提高系统的灵活性和可维护性。
依赖反转原则(DIP):DIP 原则要求高层模块不应该依赖于低层模块,二者都应该依赖于抽象。同时,抽象不应该依赖于具体的实现细节,而实现细节应该依赖于抽象。通过遵循 DIP 原则,可以实现模块之间的松耦合,提高系统的灵活性和可测试性。
工厂模式
工厂模式主要是封装对象的创建过程,客户端仅需要调用工厂就可以得到它想要的对象,通常有以下几种变体:
简单工厂模式:只有一个厂(类),根据不同的参数返回不同的产品(对象)
工厂方法模式:一个代工厂(类),提供接口,子类实现具体接口,通过调用不同的接口返回不同的产品(对象)
抽象工厂模式:与工厂方法类似,唯一的区别就是子类是创建一组相互依赖/关联的对象
发布订阅模式
维护一个消息队列,
发布者把消息发送到消息队列中,
订阅者从消息队列中订阅想要的消息,
消息队列再将消息分发给订阅者
观察模式
订阅者直接从发布者身上订阅消息
例如:
dep存储了多个watcher,
相当于多个watcher订阅了dep,
watcher在观察dep的变化
单例模式
一个类只有一个示例,无论创建多少次都是同一个实例
例如useRef
也有一些伪单例,例如vuex,可以创建多个store(违反了单例模式),但是只能有一个vuex注入到vue中(保障了唯一性)
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