文章背景图

Java23种设计模式

2026-04-30
1
-
- 分钟
|

设计模式是软件工程中一套被反复使用、经过分类编目的代码设计经验。本文将从“是什么”“为什么”“怎么分”三个维度,带你快速建立对Java 23种经典设计模式的整体认知。

一、什么是设计模式?

设计模式(Design Pattern)是对在特定场景下、解决重复出现的软件设计问题的通用、可复用的解决方案。它并非可以直接拷贝的代码或库,而更像一份经验模板——描述了问题、解决方案及其后果,帮助开发者做出更灵活、可维护的设计。

类比:如同建筑领域的“梁、柱、拱门”等构造范式,设计模式是软件架构的“半成品”蓝图。

1994年,四位作者(Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)合著的《设计模式:可复用面向对象软件的基础》一书,首次系统性地总结了23种模式,因此被称为 GoF(Gang of Four,四人组)设计模式,这也是Java领域最经典的版本。

二、设计模式的作用是什么?

正确运用设计模式能带来以下核心价值:

作用

说明

提高代码复用性

模式提供通用的设计结构,避免重复造轮子。

增强可维护性

符合设计原则(如开闭原则)的模式,使代码更易读、易修、易扩展。

促进团队沟通

模式名称(如“工厂方法”“观察者”)成为开发人员之间的共享词汇,降低沟通成本。

降低系统耦合

合理使用模式可减少模块间的硬依赖,提升系统的弹性与可测试性。

规避反模式

借鉴前人经验,避免常见但错误的设计方式(即反模式)。

⚠️ 注意:设计模式并非万能。滥用或在不合适的场景强行套用,会增加不必要的复杂度。应结合具体问题,优先考虑简洁性。

三、设计模式的大分类与小分类

GoF将23种设计模式按目的(即模式用来完成什么工作) 分为三大类:创建型结构型行为型。下面分别介绍每大类及其包含的具体模式(小分类)。

🏗️ 1. 创建型模式(Creational Patterns)

关注对象创建的过程,将对象的创建与使用分离,使系统不依赖于对象如何被创建、组合和表示。

模式名称

简要说明

单例模式(Singleton)

确保一个类只有一个实例,并提供全局访问点。

工厂方法模式(Factory Method)

定义创建对象的接口,但由子类决定实例化哪一个类。

抽象工厂模式(Abstract Factory)

创建一系列相关或相互依赖的对象族,无需指定具体类。

建造者模式(Builder)

将复杂对象的构建与表示分离,允许通过相同的构建过程创建不同的表示。

原型模式(Prototype)

通过拷贝现有实例(原型)来创建新对象,避免昂贵的构造过程。

🔗 2. 结构型模式(Structural Patterns)

关注如何将类或对象组合成更大的结构,在保证结构灵活、高效的同时,实现新的功能。

模式名称

简要说明

适配器模式(Adapter)

将一个类的接口转换成客户期望的另一个接口,使不兼容的类可以一起工作。

装饰器模式(Decorator)

动态地为对象附加额外职责,是继承的一种灵活替代。

代理模式(Proxy)

为其他对象提供一种代理,以控制对该对象的访问(如延迟加载、访问控制)。

外观模式(Facade)

为子系统中的一组接口提供一个统一的高层接口,简化使用。

桥接模式(Bridge)

将抽象部分与实现部分分离,使它们都可以独立地变化。

组合模式(Composite)

将对象组合成树形结构以表示“部分-整体”的层次结构,使客户对单个对象和组合对象的使用具有一致性。

享元模式(Flyweight)

利用共享技术高效支持大量细粒度对象,减少内存占用。

🎭 3. 行为型模式(Behavioral Patterns)

关注对象之间的通信和职责分配,描述算法与对象间交互的模式,使行为更灵活、更容易复用。

模式名称

简要说明

观察者模式(Observer)

定义对象间的一对多依赖,当一个对象状态改变时,所有依赖者自动得到通知并更新。

策略模式(Strategy)

定义一组算法族,分别封装起来,使它们可以互相替换,算法的变化独立于使用算法的客户。

模板方法模式(Template Method)

在父类中定义算法的骨架,将一些步骤延迟到子类中实现,不改变算法结构即可重定义某些步骤。

命令模式(Command)

将请求封装为对象,从而使用不同的请求、队列或日志来参数化其他对象,并支持可撤销操作。

责任链模式(Chain of Responsibility)

为多个对象处理同一请求的机会,请求沿着链传递,直到某个对象处理它。

状态模式(State)

允许一个对象在其内部状态改变时改变其行为,看起来就像修改了它的类。

迭代器模式(Iterator)

提供一种方法顺序访问聚合对象中的各个元素,而不暴露其内部表示。

访问者模式(Visitor)

表示一个作用于某对象结构中的各元素的操作,使你在不改变各元素类的前提下定义作用于这些元素的新操作。

中介者模式(Mediator)

用一个中介对象来封装一组对象之间的交互,使各对象不需要显式地相互引用。

备忘录模式(Memento)

在不破坏封装的前提下,捕获并外部化一个对象的内部状态,以便之后恢复该对象。

解释器模式(Interpreter)

给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。


📌 总结

  • 设计模式是经过验证的、可复用的面向对象设计经验。

  • 主要作用是提升代码复用性、可维护性、沟通效率和系统灵活性。

  • 23种GoF模式分为创建型(5种)、结构型(7种)、行为型(11种),覆盖了对象创建、组成结构和行为交互的典型问题。

掌握设计模式不仅是Java进阶的必修课,更是写出优雅、健壮代码的基石。建议从单例、工厂、策略、观察者等高频模式入手,结合实际代码练习,逐步内化到日常开发中。

评论交流

文章目录