导读:设计模式是个老生常谈的话题, 不同的人对此有不同的看法.新手可能会觉得设计模式难以理解, 并且也只与编程语言有关, 或者只与前端后端有关, 适用范围很窄.或者就干脆觉得这玩意儿没啥卵用, 写了那么一大坨只是让代码变得复杂难懂, 不如直接复制黏贴删删改改来得方便.老手可能会觉得设计
设计模式是个老生常谈的话题, 不同的人对此有不同的看法
新手可能会觉得设计模式难以理解, 并且也只与编程语言有关, 或者只与前端后端有关, 适用范围很窄
或者就干脆觉得这玩意儿没啥卵用, 写了那么一大坨只是让代码变得复杂难懂, 不如直接复制黏贴删删改改来得方便
老手可能会觉得设计模式就是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)