news 2026/4/23 11:28:32

Java设计模式系列 - 基本概念

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java设计模式系列 - 基本概念

基本思想

设计模式是软件开发中经过反复验证的、解决特定问题的优秀解决方案模板。在Java开发中,设计模式不仅是一种编程技巧,更是提高代码质量、可维护性和可扩展性的重要工具。使用设计模式的主要目的是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于他人于系统都是多赢的,它使得代码编制真正工程化,是软件工程的基石。

1. 分类体系

Java中一般认为有23种设计模式,这些模式可以分为三大类:创建型模式结构型模式行为型模式

1. 1 创建型模式(5种)

创建型模式关注对象的创建过程,它们提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是直接使用new操作符来实例化对象。这使得程序在决定对于给定的用例需要创建哪些对象时具有更大的灵活性。

创建型模式包括:

  • 工厂方法模式(Factory Method):定义一个创建对象的接口,让子类决定实例化哪个类
  • 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
  • 单例模式(Singleton):确保某一个类只有一个实例,并且提供一个全局访问点
  • 建造者模式(Builder):将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示
  • 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象

1.2 结构型模式(7种)

结构型模式关注类和对象的组合方式,它们通过继承概念来组合接口并定义方法组合对象以获得新功能。

结构型模式包括:

  • 适配器模式(Adapter):将一个类的方法接口转换成客户希望的另外一个接口
  • 装饰器模式(Decorator):动态地给对象添加新的功能
  • 代理模式(Proxy):为其他对象提供一个代理以便控制这个对象的访问
  • 外观模式(Facade):对外提供一个统一的方法,来访问子系统中的一群接口
  • 桥接模式(Bridge):将抽象部分和它的实现部分分离,使它们都可以独立地变化
  • 组合模式(Composite):将对象组合成树形结构以表示"部分-整体"的层次结构
  • 享元模式(Flyweight):通过共享技术来有效地支持大量细粒度的对象

1.3 行为型模式(11种)

行为型模式特别关注对象之间的通信,它们描述了对象之间如何交互以及如何分配职责。

行为型模式包括:

  • 策略模式(Strategy):定义了算法族,分别封装起来,让它们之前可以互相转换
  • 模板方法模式(Template Method):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中
  • 观察者模式(Observer):定义了对象之间的一对多依赖关系
  • 迭代子模式(Iterator):提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示
  • 责任链模式(Chain of Responsibility):将请求的发送者和接收者解耦,使得多个对象都有处理这个请求的机会
  • 命令模式(Command):将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象
  • 备忘录模式(Memento):在不破坏封装的前提下,捕获一个对象的内部状态
  • 状态模式(State):允许对象在内部状态发生改变时改变它的行为
  • 访问者模式(Visitor):在不改变数据结构的前提下,增加作用于一组对象元素的新功能
  • 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互
  • 解释器模式(Interpreter):定义语言的文法,并且建立一个解释器来解释该语言中的句子

2. 设计模式的六大原则

设计模式的实现遵循六大基本原则,这些原则是设计模式的指导思想:

2.1 开闭原则(Open Close Principle)

开闭原则指的是对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简单理解就是:为了使程序的扩展性好,易于维护和升级,我们需要使用接口和抽象类。

2.2 里氏代换原则(Liskov Substitution Principle)

里氏代换原则是面向对象设计的基本原则之一。任何基类可以出现的地方,子类一定可以出现。只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

2.3 依赖倒转原则(Dependence Inversion Principle)

这个是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体

2.4 接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。

2.5 迪米特法则(最少知道原则)(Demeter Principle)

为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

2.6 合成复用原则(Composite Reuse Principle)

原则是尽量使用合成/聚合的方式,而不是使用继承。

3. 设计模式的实际应用与选择原则

3.1 如何选择合适的设计模式

设计模式并不是解决所有问题的银弹,而是一种工具,需要根据实际情况和需求来选择和使用。在选择设计模式时,应考虑以下因素:

  1. 问题类型:首先要明确需要解决的问题属于哪一类(创建、结构、行为)
  2. 系统需求:考虑系统的可扩展性、可维护性、性能要求等
  3. 团队熟悉度:选择团队成员熟悉的设计模式,以降低学习成本
  4. 代码复杂度:避免过度设计,简单的设计往往更易于维护

3.2 设计模式的最佳实践

  1. 理解模式意图:在使用设计模式前,必须充分理解该模式的意图和适用场景
  2. 避免模式滥用:不要为了使用模式而使用模式,简单的解决方案往往更好
  3. 结合具体场景:根据具体的业务需求和技术环境调整设计模式的实现
  4. 保持代码简洁:设计模式应该使代码更清晰,而不是更复杂
  5. 持续重构:随着需求变化,及时调整设计模式的使用

3.3 常见设计模式组合使用

在实际开发中,设计模式经常组合使用以解决复杂问题:

  1. 工厂模式 + 单例模式:创建全局唯一的工厂实例
  2. 装饰器模式 + 策略模式:动态地为策略对象添加新功能
  3. 观察者模式 + 命令模式:实现事件驱动的系统架构
  4. 组合模式 + 访问者模式:处理复杂的树形结构数据

4. 设计模式在Java中的应用

4.1 Spring框架中的设计模式

Spring框架大量使用了设计模式,例如:

  • 工厂模式:BeanFactory和ApplicationContext
  • 单例模式:Spring Bean默认是单例的
  • 代理模式:AOP的实现
  • 模板方法模式:JdbcTemplate、RestTemplate等
  • 观察者模式:ApplicationEvent和ApplicationListener

4.2 Java标准库中的设计模式

  • 迭代器模式:Java集合框架中的Iterator接口
  • 适配器模式:Arrays.asList()方法
  • 装饰器模式:Java IO流中的BufferedReader、BufferedWriter
  • 策略模式:Comparator接口和Collections.sort()方法

4.3 微服务架构中的设计模式

在现代微服务架构中,设计模式仍然发挥着重要作用:

  • API网关模式:外观模式的现代应用
  • 服务发现模式:单例模式和工厂模式的结合
  • 断路器模式:状态模式的实际应用
  • 配置中心模式:观察者模式的分布式实现
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 20:51:47

非专业也能看懂的AI大模型工作原理!(非常详细)从零基础到精通,一篇就够了!

本文全面介绍AI大语言模型工作流程,从文本输入预处理到输出生成全过程。涵盖分词嵌入、Transformer架构、自注意力机制、位置编码及长文本外推等技术,并结合DeepSeek V3实例解析模型如何将语言转换为数学矩阵并生成回答。同时提供丰富的工程实践指导&…

作者头像 李华
网站建设 2026/4/18 10:55:47

前端锚点定位,零基础入门到精通,收藏这篇就够了

一 背景知识: 1.1 #号的作用 #代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如,http://www.example.com/index.html#print 就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。 为网页…

作者头像 李华
网站建设 2026/4/22 17:28:16

AI应用架构师避坑指南:虚拟协作架构中的依赖问题

AI应用架构师避坑指南:虚拟协作架构中的依赖问题——从“木桶效应”到“弹性网络”的进化之路 关键词 虚拟协作架构、依赖管理、服务耦合、故障隔离、弹性设计、AI应用架构、断路器模式 摘要 在AI应用规模化落地的今天,虚拟协作架构(由多个分布式服务/模块协同完成复杂任…

作者头像 李华
网站建设 2026/4/23 8:51:10

公司局域网访问外网的原理

公司局域网访问外网的原理 在现代企业环境中,如何让内部员工既能访问公司内部资源,又能安全地访问互联网是一个重要的网络架构问题。本文将以通俗易懂的方式介绍公司局域网访问外网的基本原理和常见配置方式。 基本网络架构 大多数公司的网络架构通常…

作者头像 李华
网站建设 2026/4/17 11:52:47

【最新源码】医疗设备维护平台023

摘 要 随着医疗行业的不断发展,医疗设备的高效维护对于保障医疗服务质量和安全至关重要。一款功能全面的医疗设备维护平台应运而生。平台基于Java语言、Spring Boot框架和MySQL数据库开发,涵盖了医护人员、工程师、报修类型、设备类型、医疗设备、任务…

作者头像 李华
网站建设 2026/4/16 21:38:37

Kotaemon GitOps 实践:ArgoCD 自动化同步配置

Kotaemon GitOps 实践:ArgoCD 自动化同步配置 在当今企业级 AI 应用的部署场景中,一个常见的困境是:开发团队刚刚上线了一个优化后的 RAG 模型,问答准确率提升了 15%,但几小时后用户反馈系统回答变得混乱。排查发现&am…

作者头像 李华