最近在看设计模式相关的知识,在此记录并分享之。
设计模式总共 23 种。有六大原则和三种类型。
六大原则 1. 单一职责原则 —Single Responsibility Principle
定义:
就一个类而言,应该仅有一个引起它变化的原因。
说明:
如果一个类承担的职责过多,就等于把这些职责耦合在一起。当业务越来越复杂时,改动一个地方就会引起整个函数的大改动。别人看你的代码也会理解起来很费解。当你把每一个函数的功能拆分的非常细致的话,后期维护修改或者他们阅读你的代码都会很轻松。
2. 里式替换原则 —LiskovSubstitution Principle
定义:
子类型必须能够替换掉他们的父类型。
说明:
如果把一个父类对象替换成一个子类对象,程序行为完全没有变化,只有这样,父类才能真正被复用,子类能够在父类的基础上增加新的行为。
里式替换原则是对开 - 闭原则的补充
3. 依赖倒置原则 —DependenceInversion Principle
定义:
A. 高层模块不应该依赖低层模块。两个都应该依赖抽象;
B. 抽象不应该依赖细节,细节应该依赖抽象;(针对接口编程,而不是针对实现)
说明
抛弃面向过程开发,减少各个模块的耦合性,提高复用性
4. 合成聚合原则 —Composite/Aggregate Reuse Principle
定义:
尽量使用合成 / 聚合,尽量不要使用类继承
说明
如果子类和父类有较强的耦合依赖关系,则父类的任何改变都会导致子类发生改变。复用子类时有需求而必须改变父类才能实现,这种情况应当避免。
5. 迪米特法则 —Law Of Demeter
定义:
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用;
说明
类之间的设计要松耦合,耦合性越低,复用性越高。
6. 开放 - 封闭原则 —Open Closed Principle
定义:
软件实体(类,模块,函数等等)应该可以扩展,但是不可以修改;
说明
对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
这样的设计,能够面对需求改变却可以保持相对稳定,从而使系统在第一个版本以后不断推出新的版本;面对需求,对程序的改动是通过增加新的代码进行的,而不是更改现有的代码;
开放封闭原则,是最为重要的设计原则,Liskov 替换原则和合成 / 聚合复用原则为开放封闭原则的实现提供保证。
三种类型
创建型、结构型、行为型。
1. 创建型创建型模式用来处理对象的创建过程,主要包含以下 5 种设计模式:
工厂方法模式(Factory Method Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
单例模式(Singleton Pattern)
2. 结构型结构型模式用来处理类或者对象的组合,主要包含以下 7 种设计模式:
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰者模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)
3. 行为型行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下 11 种设计模式:
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
策略模式(Strategy Pattern)
模板方法模式(Template Method Pattern)
访问者模式(Visitor Pattern)
模式虽多,JavaScript 中常用的有 14 种模式
单例模式
策略模式
代理模式
迭代器模式
观察者模式 (发布 - 订阅模式)
命令模式
组合模式
模板方法模式
享元模式
职责链模式
中介者模式
装饰器模式
状态模式
适配器模式