设计模式概述
设计模式
- 1 概念
- 2 分类
- 2.1 创建型模式
- 2.2 结构型模式
- 2.3 行为型模式
1 概念
设计模式是解决软件设计中常见问题的可复用方案,提供了一套经过验证的代码结构和交互方式。它们不直接转化为代码,而是描述如何组织类和对象以应对特定场景。
2 分类
设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。
创建型 | 结构型 | 行为型 |
---|---|---|
工厂方法模式 | 适配器模式 | 策略模式 |
抽象工厂模式 | 装饰器模式 | 观察者模式 |
单例模式 | 代理模式 | 命令模式 |
建造者模式 | 外观模式 | 模版方法模式 |
原型模式 | 桥接模式 | 状态模式 |
组合模式 | 责任链模式 | |
享元模式 | 中介者模式 | |
迭代器模式 | ||
访问者模式 | ||
备忘录模式 | ||
解释器模式 |
2.1 创建型模式
这类模式关注对象的创建机制,旨在以更灵活的方式创建对象,避免直接使用new
关键字。
-
工厂方法模式 (Factory Method)
- 提供了一种延迟创建类的方法, 定义一个创建对象的接口,但由子类决定实例化哪个类。
- 适用于需要生成复杂对象或对象创建过程需要封装的情况。
-
抽象工厂模式 (Abstract Factory)
- 提供一个接口用于创建相关或依赖对象的家族,而无需指定具体类。
- 适用于需要一组协同工作的对象,解决复杂系统中对象创建的问题。
-
单例模式 (Singleton)
- 确保一个类只有一个实例,并提供全局访问点。
- 适用于需要控制资源访问或共享状态的场景。
-
建造者模式 (Builder)
- 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
- 适用于对象构造过程复杂或需要分步构建的场景。
-
原型模式 (Prototype)
- 通过复制现有对象来创建新对象,而不是通过
new
。 - 适用于对象创建成本较高或需要动态配置对象的场景。
- 通过复制现有对象来创建新对象,而不是通过
2.2 结构型模式
这类模式关注类和对象的组合方式,旨在通过继承或组合实现更灵活的结构。
-
适配器模式 (Adapter)
- 将一个类的接口转换成客户端期望的另一个接口。
- 适用于需要复用现有类但其接口不匹配的情况。
-
装饰器模式 (Decorator)
- 动态地给对象添加额外的职责,比继承更灵活。
- 适用于需要扩展功能但不想修改原有代码的场景。
-
代理模式 (Proxy)
- 为其他对象提供一种代理以控制对这个对象的访问。
- 适用于需要延迟加载、访问控制或日志记录的场景。
-
外观模式 (Facade)
- 提供一个统一的接口来访问子系统中的多个接口。
- 适用于简化复杂系统的调用。
-
桥接模式 (Bridge)
- 将抽象部分与实现部分分离,使它们可以独立变化。
- 适用于需要多维度扩展的场景。
-
组合模式 (Composite)
- 将对象组合成树形结构以表示“部分-整体”的层次结构。
- 适用于需要统一处理单个对象和组合对象的情况。
-
享元模式 (Flyweight)
- 通过共享技术高效地支持大量细粒度对象。
- 适用于需要减少内存开销的场景。
2.3 行为型模式
这类模式关注对象之间的交互和职责分配,旨在实现更灵活的通信方式。
-
策略模式 (Strategy)
- 定义一系列算法,封装每个算法并使它们可以互相替换。
- 适用于需要在运行时动态选择算法的场景。
-
观察者模式 (Observer)
- 定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知。
- 适用于事件驱动的系统。
-
命令模式 (Command)
- 将请求封装为对象,从而支持请求的排队、记录或撤销。
- 适用于需要解耦发送者和接收者的场景。
-
模板方法模式 (Template Method)
- 定义一个操作中的算法骨架,将某些步骤延迟到子类中实现。
- 适用于需要固定流程但允许部分步骤灵活变化的场景。
-
状态模式 (State)
- 允许对象在其内部状态改变时改变它的行为。
- 适用于对象行为依赖于状态的场景。
-
责任链模式 (Chain of Responsibility)
- 将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
- 适用于需要动态指定处理对象的场景。
-
中介者模式 (Mediator)
- 定义一个中介对象来封装一系列对象之间的交互。
- 适用于需要减少对象间直接耦合的场景。
-
迭代器模式 (**lterator **)
- 提供一种方法顺序访问聚合对象中的各个元素,而不暴露其内部表示。
- 适用于需要统一遍历不同结构的场景。
-
访问者模式 (Visitor)
- 将算法与对象结构分离,使得可以在不修改对象结构的情况下添加新的操作。
- 适用于需要频繁添加新操作的场景。
-
备忘录模式 (Memento)
- 在不破坏封装性的前提下捕获并保存对象的内部状态,以便后续恢复。
- 适用于需要撤销或回滚的场景。
-
解释器模式 (Interpreter)
- 定义语言的文法表示,并提供一个解释器来处理这种语言。
- 适用于需要解析特定语法规则的场景。