总结
总结各种设计模式的定义、用途及对应的 Java 实现示例
总结
| 模式 | 用途 |
|---|---|
建造者模式(Builder Pattern) | 建造者模式用于创建对象,它将对象的表示与创建过程分离,并将创建过程分解为多个步骤。例如,在 Java 中, |
单例模式(Singleton Pattern) | 单例模式用于限制一个类只能被实例化一次。例如,在 Java 中, |
原型模式(Prototype Pattern) | 原型模式通过复制现有对象来创建新对象,被复制的对象称为原型。在 Java 中, |
工厂方法模式(Factory Method Pattern) | 工厂方法模式定义了一个用于创建对象的接口,但将实际的对象实例化延迟到子类中完成。例如, |
抽象工厂模式(Abstract Factory) | 抽象工厂模式定义了一个接口,用于创建一组相关或相互依赖的对象,而无需指定它们的具体类。该模式特别适用于需要支持不同操作系统的框架或工具包。例如,如果你的库提供了高级 UI 控件,则可能需要一组适用于 macOS 的产品族,以及另一组适用于 Windows 的产品族。 |
适配器模式(Adapter Pattern) | 适配器模式使得原本因接口不兼容而无法协同工作的两个类能够一起工作。例如, |
桥接模式(Bridge Pattern) | 桥接模式描述了如何将原本融合在一个类层次结构中的两个软件层拆分开来,转变为由“桥”连接的两个平行的类层次结构。 |
组合模式(Composite Pattern) | 该模式允许你以统一的方式对待整体和部分。最接近的类比是一棵树:树是一种递归的数据结构,其中每个节点本身又是一棵子树,除了叶子节点之外。 |
装饰器模式(Decorator Pattern) | 装饰器模式可被视为一种包装机制,更正式地说,是一种动态增强或扩展对象行为的方式。当需要新增功能时,该模式提供了一种替代继承的方案。一个典型的例子是 |
外观模式(Facade Pattern) | 外观模式定义了一个统一的高层接口,用于访问一个或多个子系统,旨在简化对这些子系统的使用。 |
享元模式(Flyweight Pattern) | 该模式提倡在大量细粒度对象之间共享状态以提高性能。 |
代理模式(Proxy Pattern) | 在代理模式中,代理对象代表另一个被称为“主题”的对象出现在客户端面前,真实主题对象被屏蔽,避免与客户端直接交互。 |
责任链模式(Chain of Responsibility Pattern) | 在责任链模式的实现中,请求沿着一系列处理对象传递,直到某个对象处理该请求或请求未被处理而脱离链条。多个对象都有机会处理请求,从而实现请求发送者与接收者之间的解耦。 |
观察者模式(Observer Pattern,又称发布/订阅模式) | 该模式正式定义为对象间的一对多依赖关系,当一个对象状态发生变化时,所有依赖它的对象都会收到通知。所有实现了 |
解释器模式(Interpreter Pattern) | 解释器模式将某种语言的语句转换为其语法结构并进行解释执行。 |
命令模式(Command Pattern) | 该模式将操作或请求封装为对象,使其可以作为参数传递给其他对象,从而实现对客户端的请求参数化。请求可以被排队等待后续执行,也可以被记录日志。记录请求还支持撤销操作。所有实现了 |
迭代器模式(Iterator Pattern) | 迭代器模式正式定义为:提供一种方式,顺序访问聚合对象中的各个元素,而又不暴露其内部实现。所有实现了 |
中介者模式(Mediator Pattern) | 该模式用于封装或集中多个对象之间的交互。面向对象设计可能导致行为分散在多个类中,造成对象间连接过多。通过封装,对象不再直接引用彼此,也不再持有对方的引用。 |
备忘录模式(Memento Pattern) | 备忘录模式允许我们在不暴露对象内部结构的前提下保存其内部状态,以便之后能将对象恢复到该状态。所有实现了 |
状态模式(State Pattern) | 状态模式封装了机器可能处于的各种状态。这个机器或上下文(在模式术语中称为 context)可以接受操作并由此进入不同的状态。如果不使用该模式,代码会变得僵化且充满 if-else 条件判断。 |
模板方法模式(Template Method) | 模板方法模式定义了一个算法的骨架或步骤,但允许子类重写其中某些步骤以提供具体实现。 |
策略模式(Strategy Pattern) | 该模式允许将一组相关的算法通过一个抽象接口进行统一管理,客户端面向该接口编程。通过抽象,可以在不修改客户端代码的情况下替换不同的算法或策略。 |
访问者模式(Visitor Pattern) | 访问者模式允许我们为一个类或类层次结构定义新的操作,而无需修改这些类本身的代码。该模式适用于对象结构相对稳定,但需要频繁添加新操作的场景。 |