跳到主要内容

设计模式

设计模式是个老生常谈的话题, 不同的人对此有不同的看法

  • 新手可能会觉得设计模式难以理解, 并且也只与编程语言有关, 或者只与前端后端有关, 适用范围很窄
    或者就干脆觉得这玩意儿没啥卵用, 写了那么一大坨只是让代码变得复杂难懂, 不如直接复制黏贴删删改改来得方便
  • 老手可能会觉得设计模式就是yyds, 写代码时不搞个什么模式就显得太low了
    不管写什么东西都要分离出接口和实现, 搞一个战未来的模式, 不如此无法体现出设计模式的"灵活性"
  • 也有人根本没听说过什么设计模式, 但看了些例子之后表示, "就这?"
  • ......

什么是设计模式

设计模式(Design pattern)并不是什么创新性的发明, 只是对一些解决方案的归纳
就像在 "氧气" 这个词出现之前, 人类也是一样可以呼吸的
针对不同场景下的问题, 开发人员使用了不同的解决方案, 经过整理归纳之后形成了针对特定场景的通用方案, 这些方案被称为"设计模式"

设计模式六大原则

  • 总则: 开放封闭原则(Open Closed Principle,OCP): 对扩展开放, 对修改关闭。即在不修改原有代码的基础上进行扩展
  • 单一职责原则(Single Responsibility Principle,SRP): 一个类或者一个方法只有一个职责
  • 里氏替换原则(Liskov Substitution Principle,LSP): 子类可以替换父类, 并保持父类的功能和特性
  • 依赖倒置原则(Dependency Inversion Principle,DIP): 高层模块不应该依赖于低层模块, 二者都应该依赖于抽象, 而不是具体的实现细节
  • 接口隔离原则(Interface Segregation Principle,ISP): 尽量使用多个专门的接口, 而不是单一的总接口
  • 最少知道原则(Law of Demeter,LoD): 一个对象应该对其他对象有尽可能少的了解, 不应该直接与其他对象之间发生联系
  • 合成复用原则(Composite/Aggregate Reuse Principle,CARP): 尽量使用合成, 而不是通过继承达到复用的目的

众所周知四大天王有五个, 所以六大原则有七个也是很正常的事情

三大类设计模式

  • 创建型模式: 关注对象的创建过程, 包括对象的实例化和组装方式, 使得代码更加灵活可扩展
  • 结构型模式: 关注对象之间的组成和协作方式, 帮助我们将对象组合成更大的结构, 以实现更复杂的功能
  • 行为型模式: 关注对象之间的交互方式和职责划分, 使得系统中对象之间的通信更加灵活高效

二十三种设计模式

  • 创建型模式
    • 工厂方法模式(Factory Method Pattern)
    • 抽象工厂模式(Abstract Factory Pattern)
    • 单例模式(Singleton Pattern)
    • 建造者模式(Builder Pattern)
    • 原型模式(Prototype Pattern)
  • 结构型模式
    • 适配器模式(Adapter Pattern)
    • 桥接模式(Bridge Pattern)
    • 组合模式(Composite Pattern)
    • 装饰模式(Decorator Pattern)
    • 外观模式(Facade Pattern)
    • 享元模式(Flyweight Pattern)
    • 代理模式(Proxy Pattern)
  • 行为型模式
    • 责任链模式(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)