常见设计模式总结
创建型模式
创建型模式主要关注对象的创建过程,常见的模式包括:
1. 单例模式 (Singleton)
确保一个类只有一个实例,并提供全局访问点。
应用场景:
配置管理类
线程池管理
示例代码:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}2. 工厂方法模式 (Factory Method)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
应用场景:
当一个类不知道它所必须创建的对象的类时
示例代码:
3. 抽象工厂模式 (Abstract Factory)
提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。
应用场景:
需要创建一系列相关的产品对象
示例代码:
4. 建造者模式 (Builder)
将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
应用场景:
创建复杂对象的过程
示例代码:
5. 原型模式 (Prototype)
通过复制现有的实例来创建新的实例。
应用场景:
当创建对象的成本较高时
示例代码:
结构型模式
结构型模式关注类或对象的组合,常见的模式包括:
1. 适配器模式 (Adapter)
将一个类的接口转换成客户希望的另一个接口。
应用场景:
需要使用一个已有的类,但其接口不符合需求
示例代码:
2. 装饰器模式 (Decorator)
动态地给一个对象添加一些额外的职责。
应用场景:
需要扩展一个类的功能
示例代码:
3. 代理模式 (Proxy)
为其他对象提供一种代理以控制对这个对象的访问。
应用场景:
需要控制对某个对象的访问
示例代码:
4. 外观模式 (Facade)
为复杂子系统提供一个统一的接口。
应用场景:
简化与复杂系统的交互
示例代码:
5. 桥接模式 (Bridge)
将抽象部分与实现部分分离,使它们可以独立变化。
应用场景:
当需要在多个维度上变化时
示例代码:
6. 组合模式 (Composite)
将对象组合成树形结构以表示部分-整体的层次。
应用场景:
需要表示部分与整体的层次结构
示例代码:
7. 享元模式 (Flyweight)
运用共享技术有效地支持大量细粒度的对象。
应用场景:
当需要大量相似对象时
示例代码:
行为型模式
行为型模式关注对象之间的交互,常见的模式包括:
1. 观察者模式 (Observer)
定义对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都得到通知。
应用场景:
事件处理系统
示例代码:
2. 策略模式 (Strategy)
定义一系列算法, 将每一个算法封装起来, 并使它们可以互换。
应用场景:
需要在运行时选择算法
示例代码:
3. 命令模式 (Command)
将请求封装为对象,从而使您可以使用不同的请求、队列或日志请求,以及支持可撤销操作。
应用场景:
需要将操作参数化
示例代码:
4. 状态模式 (State)
允许对象在内部状态改变时改变它的行为。
应用场景:
需要根据状态改变行为
示例代码:
5. 责任链模式 (Chain of Responsibility)
使多个对象都有机会处理请求,从而避免请求发送者与接收者之间的耦合。
应用场景:
处理请求的不同级别
示例代码:
6. 备忘录模式 (Memento)
在不违反封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
应用场景:
需要保存和恢复对象的状态
示例代码:
7. 访问者模式 (Visitor)
表示一个作用于某对象结构中的各元素的操作。
应用场景:
需要对对象结构中的元素进行操作
示例代码:
8. 中介者模式 (Mediator)
定义一个中介对象来封装一系列的对象交互。
应用场景:
需要减少多个对象之间的复杂交互
示例代码:
9. 解释器模式 (Interpreter)
给定一个语言, 定义它的文法表示, 并定义一个解释器来处理该语言。
应用场景:
需要解释特定语言的场景
示例代码:
最后更新于