news 2026/4/18 3:24:50

24 种 Java 设计模式的完整分类及说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
24 种 Java 设计模式的完整分类及说明

以下是24 种 Java 设计模式的完整分类及说明(按创建型、结构型、行为型三大类划分):

一、创建型模式(6 种):负责对象的创建,隐藏创建细节

创建型模式关注如何灵活、安全地创建对象,避免直接使用new关键字,提高代码的可维护性和扩展性。

  1. 简单工厂模式(Simple Factory)

    • 核心:通过一个静态工厂类,根据参数返回不同产品的实例(如Integer.valueOf())。

    • 应用场景:产品种类少且稳定(如日志工具、配置管理器)。

    • 特点:集中管理创建逻辑,但新增产品需修改工厂类(违反开闭原则)。

  2. 工厂方法模式(Factory Method)

    • 核心:定义创建对象的接口,由子类决定实例化哪个类(如JDBCDriverManager.getConnection())。

    • 应用场景:需要灵活扩展产品类型(如数据库驱动、日志框架)。

    • 特点:符合开闭原则,新增产品只需添加工厂子类。

  3. 抽象工厂模式(Abstract Factory)

    • 核心:提供一个接口,用于创建一系列相关或依赖对象的家族(如SwingLookAndFeel工厂)。

    • 应用场景:需要创建产品族(如不同操作系统的 UI 组件:Windows/Mac 按钮+文本框)。

    • 特点:确保产品族的一致性,但扩展新产品族需修改抽象工厂接口(违反开闭原则)。

  4. 单例模式(Singleton)

    • 核心:确保一个类仅有一个实例,并提供全局唯一访问点(如SpringBeanFactory、配置管理器)。

    • 应用场景:需要全局唯一实例的对象(如数据库连接池、缓存)。

    • 特点:线程安全(双重检查锁定、静态内部类)、延迟初始化。

  5. 建造者模式(Builder)

    • 核心:将复杂对象的构建与表示分离,通过指挥者(Director)控制构建过程(如StringBuilderHttpRequest.builder())。

    • 应用场景:构建参数众多的对象(如 HTTP 请求、配置文件)。

    • 特点:支持链式调用,隐藏构建细节。

  6. 原型模式(Prototype)

    • 核心:通过复制现有对象(原型)创建新对象(如Javaclone()方法、BeanUtils.copyProperties())。

    • 应用场景:对象创建成本高(如数据库查询结果、配置对象)或需要大量相似对象(如游戏中的精灵)。

    • 特点:避免重复初始化,分为浅拷贝(复制引用)和深拷贝(复制对象本身)。

二、结构型模式(7 种):负责类或对象的组合,形成更大的结构

结构型模式关注如何将类或对象组合成更灵活的结构,解决类之间的耦合问题。

  1. 适配器模式(Adapter)

    • 核心:将一个类的接口转换成客户端期望的另一个接口(如JavaInputStreamReader(字节流→字符流)、第三方库适配)。

    • 应用场景:集成第三方库(如Redis客户端的JedisAdapter)、兼容旧系统。

    • 特点:对象适配器(组合,推荐) vs 类适配器(继承,不推荐)。

  2. 桥接模式(Bridge)

    • 核心:将抽象部分与实现部分分离,使它们可独立变化(如JavaAWT(抽象窗口工具包)、JDBC驱动)。

    • 应用场景:多维度变化(如不同形状的按钮、不同数据库的连接)。

    • 特点:避免子类爆炸(如WindowsButtonMacButtonLinuxButton),提高扩展性。

  3. 组合模式(Composite)

    • 核心:将对象组合成树形结构,以表示“部分-整体”层次(如JavaFile类、UI控件树)。

    • 应用场景:树形结构(如文件系统、菜单、组织架构)。

    • 特点:统一接口(Component),支持递归遍历(如File.listFiles())。

  4. 装饰器模式(Decorator)

    • 核心:动态地给对象添加职责,而不影响其他对象(如JavaIO流(BufferedInputStreamDataInputStream)、Spring@Transactional)。

    • 应用场景:功能扩展(如给咖啡加牛奶、糖;给方法加日志、事务)。

    • 特点:比继承更灵活,支持叠加装饰(如BufferedInputStream(FileInputStream))。

  5. 外观模式(Facade)

    • 核心:为子系统提供统一的高层接口,简化客户端使用(如JavaJDBCDriverManager.getConnection())、SpringApplicationContext)。

    • 应用场景:复杂库的简化(如HibernateSession、微服务网关)。

    • 特点:不封装子系统,仅提供便捷入口。

  6. 享元模式(Flyweight)

    • 核心:通过共享技术有效支持大量细粒度对象(如JavaString常量池、Integer缓存(-128~127))。

    • 应用场景:对象创建代价高(如文本编辑器中的字符、游戏中的子弹/粒子)。

    • 特点:分离内在状态(可共享,如字符编码)和外在状态(不可共享,如字符位置)。

  7. 代理模式(Proxy)

    • 核心:为其他对象提供代理,以控制对该对象的访问(如Java的动态代理(JDKCGLIB)、SpringAOP)。

    • 应用场景:远程代理(RPC调用)、虚拟代理(延迟加载,如图片缩略图)、保护代理(权限控制)、智能引用(引用计数、日志)。

    • 特点:静态代理(需实现相同接口) vs 动态代理(无需实现接口,更灵活)。

三、行为型模式(11 种):负责对象之间的交互及算法分配

行为型模式关注对象之间的通讯和职责分配,解决对象之间的耦合问题。

  1. 责任链模式(Chain of Responsibility)

    • 核心:使多个对象有机会处理请求,避免请求发送者与接收者耦合(如JavaServlet过滤器、SpringInterceptor、审批流程)。

    • 应用场景:请求处理链(如日志过滤、权限校验、工作流)。

    • 特点:每个处理器持有下一个处理器的引用,支持动态调整处理顺序。

  2. 命令模式(Command)

    • 核心:将请求封装为对象,使你可以参数化客户、队列请求、记录日志、支持撤销(如JavaRunnableSpringJdbcTemplate)。

    • 应用场景:命令队列(如任务调度)、撤销/重做(如文本编辑器)、远程调用(如RPC)。

    • 特点:分离调用者(Invoker)与执行者(Receiver),支持命令的持久化和回滚。

  3. 解释器模式(Interpreter)

    • 核心:定义语言文法,并解释该语言中的句子(如Java的正则表达式引擎、SQL解析器、规则引擎)。

    • 应用场景:需要解释特定语言的场景(如数学表达式、配置文件)。

    • 特点:文法规则(终结符/非终结符表达式)、上下文(存储解释状态)。

  4. 迭代器模式(Iterator)

    • 核心:提供一种方法顺序访问聚合对象的元素,而不暴露其内部表示(如JavaIterableIteratorList/Set的遍历)。

    • 应用场景:需要遍历集合对象的场景(如ArrayListHashSetTreeMap)。

    • 特点:支持多种遍历方式(正向、反向、层级),隐藏集合的内部结构。

  5. 中介者模式(Mediator)

    • 核心:用一个中介对象封装一系列对象交互,降低耦合(如JavaChatRoomGUI组件协调、航空管制)。

    • 应用场景:对象之间需要频繁交互(如聊天室、多人游戏、工作流引擎)。

    • 特点:中介者持有所有对象的引用,统一处理交互逻辑。

  6. 备忘录模式(Memento)

    • 核心:在不破坏封装性的前提下捕获并外部化对象内部状态,以便恢复(如JavaThreadLocalSpringTransactionSynchronization)。

    • 应用场景:撤销操作(Ctrl+Z)、游戏存档、事务回滚。

    • 特点:备忘录(Memento)存储对象状态,管理者(Caretaker)保管备忘录,原对象(Originator)恢复状态。

  7. 观察者模式(Observer)

    • 核心:定义对象间一对多的依赖,当对象改变状态时,所有依赖者自动更新(如JavaObservable/ObserverSpringApplicationEvent、事件总线)。

    • 应用场景:事件驱动(如按钮点击、消息订阅)、发布-订阅(Pub/Sub)。

    • 特点:主题(Subject)维护观察者列表,观察者(Observer)实现更新方法。

  8. 状态模式(State)

    • 核心:允许对象在其内部状态改变时改变其行为(如JavaThread状态(新建、运行、阻塞)、TCP连接状态(建立、传输、关闭))。

    • 应用场景:对象状态变化影响行为(如订单状态(待支付、已支付、已发货)、游戏角色状态(正常、眩晕、死亡))。

    • 特点:状态接口(State)定义行为,上下文(Context)委托给当前状态。

  9. 策略模式(Strategy)

    • 核心:定义一系列算法,把它们封装起来,并使它们可互相替换(如JavaComparatorSpringResource、支付方式(支付宝、微信、银行卡))。

    • 应用场景:算法切换(如排序算法(冒泡、快速、归并)、折扣策略(8折、满减、优惠券))。

    • 特点:策略接口(Strategy)定义算法,上下文(Context)持有策略引用。

  10. 模板方法模式(Template Method)

    • 核心:定义算法骨架,将一些步骤延迟到子类(如JavaHttpServletdoGet()/doPost())、JUnit测试生命周期(setUp()/tearDown()))。

    • 应用场景:算法步骤固定,部分步骤可自定义(如文档生成、数据处理流程)。

    • 特点:模板方法(templateMethod())定义骨架,钩子方法(primitiveOperation())允许子类扩展。

  11. 访问者模式(Visitor)

    • 核心:表示一个作用于某对象结构中各元素的操作,可在不改变元素类的前提下定义新操作(如JavaAST(抽象语法树)遍历、报表生成)。

    • 应用场景:需要添加新操作但不想修改元素类(如编译器的语法分析、数据结构的遍历)。

    • 特点:元素(Element)接受访问者(Visitor),访问者实现操作方法。

四、补充说明:24 种设计模式的来源

  • GoF 23 种:由 Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides 四位作者在《设计模式:可复用面向对象软件的基础》(1994 年)一书中提出,是设计模式的经典集合。

  • 第 24 种(简单工厂模式):部分资料将其补充为第 24 种,因它是工厂方法模式的简化版,更常用(如Integer.valueOf()LoggerFactory.getLogger())。

五、设计模式的最佳实践

  1. 遵循 SOLID 原则:尤其是开闭原则(对扩展开放,对修改关闭)、单一职责原则(一个类只负责一项职责)。

  2. 避免过度设计:不要为了使用设计模式而使用,需根据实际场景选择(如简单场景无需用抽象工厂模式)。

  3. 结合框架使用SpringMyBatis等框架已大量使用设计模式(如SpringIOC(工厂模式)、AOP(代理模式)、MVC(模板方法模式)),学习框架源码可加深对设计模式的理解。

通过以上 24 种设计模式的分类及说明,可覆盖 Java 开发中大部分常见场景,提高代码的可维护性、可扩展性和可读性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 6:37:44

海洋科学研究:浮标数据趋势分析与假设生成

海洋科学研究:浮标数据趋势分析与假设生成 在太平洋深处,数百个无人值守的浮标正持续向卫星发送温度、盐度和流速数据。这些数字背后,是气候变化的蛛丝马迹,是厄尔尼诺事件的前兆信号,也是生态系统的微妙失衡。然而&am…

作者头像 李华
网站建设 2026/4/15 16:46:54

QQ消息防撤回终极方案:LiteLoaderQQNT插件完整教程

QQ消息防撤回终极方案:LiteLoaderQQNT插件完整教程 【免费下载链接】LiteLoaderQQNT-Anti-Recall LiteLoaderQQNT 插件 - QQNT 简易防撤回 项目地址: https://gitcode.com/gh_mirrors/li/LiteLoaderQQNT-Anti-Recall 在日常沟通中,QQ消息被撤回往…

作者头像 李华
网站建设 2026/4/17 7:26:12

Spring Boot LayUI后台管理系统:企业数字化转型的智能引擎

在当今数字化浪潮中,企业迫切需要一套高效、稳定、易用的后台管理系统来支撑日常运营。基于Spring Boot和LayUI框架的这套企业级后台管理系统,正是为满足这一需求而生的革命性解决方案。它不仅提供了完整的权限控制体系,更通过智能化的架构设…

作者头像 李华
网站建设 2026/4/12 19:53:14

揭秘Open-AutoGLM源码结构:5步实现本地部署与高效调用

第一章:Open-AutoGLM开源代码如何使用Open-AutoGLM 是一个基于 AutoGLM 架构的开源项目,旨在简化大语言模型在自动化任务中的部署与调用。该项目提供了一套完整的 API 接口和本地运行支持,适用于文本生成、指令解析和智能对话等场景。环境准备…

作者头像 李华
网站建设 2026/4/9 8:06:43

Venera跨平台漫画阅读器:从技术原理到沉浸式阅读体验的完整探索

Venera跨平台漫画阅读器:从技术原理到沉浸式阅读体验的完整探索 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 技术架构深度解析 Flutter框架为Venera提供了真正的跨平台能力。通过Dart语言的即时编译特性&…

作者头像 李华
网站建设 2026/4/17 3:46:17

智普 Open-AutoGLM 到底有多强:5大核心能力彻底改变AI开发模式

第一章:智普 Open-AutoGLM 到底有多强:重新定义AI开发边界智普推出的 Open-AutoGLM 正在成为 AI 自动化开发领域的新标杆。它不仅集成了强大的自然语言理解与生成能力,更通过自动化任务编排机制,显著降低了 AI 应用开发的门槛。开…

作者头像 李华