Logo
Section 1 / 2

总结

总结各种设计模式的定义、用途及对应的 Java 实现示例

导入

总结

总结各种设计模式的定义、用途及对应的 Java 实现示例

总结

模式用途

建造者模式(Builder Pattern)

建造者模式用于创建对象,它将对象的表示与创建过程分离,并将创建过程分解为多个步骤。例如,在 Java 中,java.lang.StringBuilder 就是建造者模式的一个实例。

单例模式(Singleton Pattern)

单例模式用于限制一个类只能被实例化一次。例如,在 Java 中,java.lang.Runtime 类就是一个单例。

原型模式(Prototype Pattern)

原型模式通过复制现有对象来创建新对象,被复制的对象称为原型。在 Java 中,java.lang.Object 类的 clone() 方法就是该模式的一个例子。

工厂方法模式(Factory Method Pattern)

工厂方法模式定义了一个用于创建对象的接口,但将实际的对象实例化延迟到子类中完成。例如,java.util.Calendar 类中的 getInstance() 方法就是工厂方法模式的一个示例。

抽象工厂模式(Abstract Factory)

抽象工厂模式定义了一个接口,用于创建一组相关或相互依赖的对象,而无需指定它们的具体类。该模式特别适用于需要支持不同操作系统的框架或工具包。例如,如果你的库提供了高级 UI 控件,则可能需要一组适用于 macOS 的产品族,以及另一组适用于 Windows 的产品族。

适配器模式(Adapter Pattern)

适配器模式使得原本因接口不兼容而无法协同工作的两个类能够一起工作。例如,java.util.Arrays 提供的 asList() 方法就是适配器模式的一个例子,它接收一个数组并返回一个列表。

桥接模式(Bridge Pattern)

桥接模式描述了如何将原本融合在一个类层次结构中的两个软件层拆分开来,转变为由“桥”连接的两个平行的类层次结构。

组合模式(Composite Pattern)

该模式允许你以统一的方式对待整体和部分。最接近的类比是一棵树:树是一种递归的数据结构,其中每个节点本身又是一棵子树,除了叶子节点之外。

装饰器模式(Decorator Pattern)

装饰器模式可被视为一种包装机制,更正式地说,是一种动态增强或扩展对象行为的方式。当需要新增功能时,该模式提供了一种替代继承的方案。一个典型的例子是 java.io 包,其中包含多个装饰器类。例如,BufferedInputStream 包装了 FileInputStream,从而提供缓冲功能。

外观模式(Facade Pattern)

外观模式定义了一个统一的高层接口,用于访问一个或多个子系统,旨在简化对这些子系统的使用。

享元模式(Flyweight Pattern)

该模式提倡在大量细粒度对象之间共享状态以提高性能。java.lang.Boolean.valueOf() 和 java.lang.Integer.valueOf() 方法都返回享元对象。

代理模式(Proxy Pattern)

在代理模式中,代理对象代表另一个被称为“主题”的对象出现在客户端面前,真实主题对象被屏蔽,避免与客户端直接交互。java.rmi.* 包包含了用于创建代理的类。RMI 即远程方法调用,是一种允许一个 Java 虚拟机上的对象调用另一个 Java 虚拟机上对象的方法的机制。

责任链模式(Chain of Responsibility Pattern)

在责任链模式的实现中,请求沿着一系列处理对象传递,直到某个对象处理该请求或请求未被处理而脱离链条。多个对象都有机会处理请求,从而实现请求发送者与接收者之间的解耦。java.util.logging.Logger 类的 log() 方法就是该模式的一个例子。

观察者模式(Observer Pattern,又称发布/订阅模式)

该模式正式定义为对象间的一对多依赖关系,当一个对象状态发生变化时,所有依赖它的对象都会收到通知。所有实现了 java.util.EventListener 接口的类型都是该模式的示例。

解释器模式(Interpreter Pattern)

解释器模式将某种语言的语句转换为其语法结构并进行解释执行。

命令模式(Command Pattern)

该模式将操作或请求封装为对象,使其可以作为参数传递给其他对象,从而实现对客户端的请求参数化。请求可以被排队等待后续执行,也可以被记录日志。记录请求还支持撤销操作。所有实现了 java.lang.Runnable 接口的类型都是该模式的示例。

迭代器模式(Iterator Pattern)

迭代器模式正式定义为:提供一种方式,顺序访问聚合对象中的各个元素,而又不暴露其内部实现。所有实现了 java.util.Iterator 接口的类型都是该模式的示例。

中介者模式(Mediator Pattern)

该模式用于封装或集中多个对象之间的交互。面向对象设计可能导致行为分散在多个类中,造成对象间连接过多。通过封装,对象不再直接引用彼此,也不再持有对方的引用。java.util.Timer 类体现了这一模式,它可以在线程后台安排任务进行一次性执行或周期性重复执行。

备忘录模式(Memento Pattern)

备忘录模式允许我们在不暴露对象内部结构的前提下保存其内部状态,以便之后能将对象恢复到该状态。所有实现了 java.io.Serializable 接口的类都是该模式的示例。

状态模式(State Pattern)

状态模式封装了机器可能处于的各种状态。这个机器或上下文(在模式术语中称为 context)可以接受操作并由此进入不同的状态。如果不使用该模式,代码会变得僵化且充满 if-else 条件判断。

模板方法模式(Template Method)

模板方法模式定义了一个算法的骨架或步骤,但允许子类重写其中某些步骤以提供具体实现。java.util.AbstractList、java.util.AbstractSet 和 java.util.AbstractMap 中的非抽象方法就是该模式的示例。

策略模式(Strategy Pattern)

该模式允许将一组相关的算法通过一个抽象接口进行统一管理,客户端面向该接口编程。通过抽象,可以在不修改客户端代码的情况下替换不同的算法或策略。java.util.Comparator 接口中的 compare() 方法允许用户自定义比较两个同类型对象的算法或策略。

访问者模式(Visitor Pattern)

访问者模式允许我们为一个类或类层次结构定义新的操作,而无需修改这些类本身的代码。该模式适用于对象结构相对稳定,但需要频繁添加新操作的场景。java.nio.file.FileVisitor 接口有一个实现类 SimpleFileVisitor,这就是一个访问者的例子。该接口定义了对文件的访问行为,其实现被传入 Files.walkFileTree() 方法中,用于遍历文件树中的每一个文件。

行为型模式

尾声