目录
- 一、设计模式的起源
- 二、设计模式的分类
- 1. 创建型模式
- 2. 结构型模式
- 3. 行为型模式
- 三、设计模式的实践
- 1. 单例模式
- 2. 工厂模式
- 3. 策略模式
- 四、设计模式的优势
- 五、设计模式的局限性
- 六、总结
在软件开发的浩瀚星空中,设计模式犹如一颗颗璀璨的星辰,照亮了开发者前行的道路。它们是经验的结晶,是智慧的传承,帮助我们解决了一个又一个棘手的问题。今天,就让我们一同走进 Java 设计模式的世界,探索那些隐藏在代码背后的奥秘。
一、设计模式的起源
设计模式的概念最早可以追溯到 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四位大师合著的《Design Patterns: Elements of Reusable Object-Oriented Software》一书。这本书被誉为 “四人帮”(Gang of Four,GoF)的经典之作,书中总结了 23 种设计模式,为软件开发提供了宝贵的指导。
二、设计模式的分类
设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。
1. 创建型模式
创建型模式关注对象的创建过程,旨在以适当的方式创建对象,增强代码的灵活性和可复用性。常见的创建型模式有:
- 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。
- 工厂模式(Factory Pattern):定义一个创建对象的接口,由子类决定实例化哪一个类。
- 抽象工厂模式(Abstract Factory Pattern):提供一个接口,创建相关或依赖对象的家族,而无需指定具体类。
- 建造者模式(Builder Pattern):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
- 原型模式(Prototype Pattern):通过复制现有的实例来创建新的对象,而不是通过实例化类。
2. 结构型模式
结构型模式关注类和对象的组合,旨在以适当的方式组合对象,形成更大的结构。常见的结构型模式有:
- 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作。
- 装饰器模式(Decorator Pattern):动态地给对象添加一些额外的职责,而不影响其他对象。
- 代理模式(Proxy Pattern):为其他对象提供一个代理以控制对这个对象的访问。
- 桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立地变化。
- 组合模式(Composite Pattern):将对象组合成树形结构以表示部分-整体的层次结构,使用户对单个对象和组合对象的使用具有一致性。
3. 行为型模式
行为型模式关注对象之间的协作,旨在以适当的方式让对象之间进行通信和协作,完成特定的任务。常见的行为型模式有:
- 策略模式(Strategy Pattern):定义一系列算法,并将每个算法封装起来,使它们可以互换使用。
- 模板方法模式(Template Method Pattern):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变算法结构即可重新定义算法的某些特定步骤。
- 观察者模式(Observer Pattern):定义对象间的一对多依赖,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。
- 命令模式(Command Pattern):将请求封装为对象,从而可用不同的请求、队列或者日志来参数化其他对象,支持可撤销的操作。
- 责任链模式(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。
三、设计模式的实践
1. 单例模式
单例模式确保一个类只有一个实例,并提供全局访问点。以下是一个简单的单例模式实现:
public class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance == null