news 2025/12/20 0:35:35

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/18 20:41:57

9个高效降AI率工具,本科生必看!

9个高效降AI率工具,本科生必看! AI降重工具:论文写作的“隐形助手” 在当今学术写作中,越来越多的本科生开始借助AI工具进行论文撰写。然而,随着AIGC(人工智能生成内容)检测技术的不断升级&…

作者头像 李华
网站建设 2025/12/18 20:41:47

51单片机温度报警器:从C程序到Proteus仿真全记录

51单片机温度报警器C程序、proteus仿真、报告 支持按键设置上下限温度值、当实际温度不在上下限温度值之间时、蜂鸣器报警最近玩了玩51单片机,做了个温度报警器,觉得还挺有意思,来和大家分享下整个过程,包括C程序代码、Proteus仿真…

作者头像 李华
网站建设 2025/12/18 20:41:39

10 个降AI率工具,继续教育学生必备!

10 个降AI率工具,继续教育学生必备! AI降重工具:让论文更“自然”的秘密武器 随着人工智能技术的不断发展,越来越多的学生在撰写论文时开始依赖AI工具进行内容生成。然而,这种便捷的背后也带来了新的挑战——如何有效降…

作者头像 李华
网站建设 2025/12/18 20:41:28

Java快速排序,零基础小白到精通,收藏这篇就够了

文章目录 Java实现快速排序 快速排序原理快速排序一次划分图文演示过程整个快速排序的过程具体Java代码实现简结快速排序的性能 Java实现快速排序 冲鸭,装上涡轮增鸭,开始学习快速排序算法吧!(快排也是一个递归过程噢&#x…

作者头像 李华
网站建设 2025/12/18 20:39:20

9个AI写作工具,自考论文轻松搞定!

9个AI写作工具,自考论文轻松搞定! AI写作工具如何改变自考论文的写作方式 在自考论文的撰写过程中,许多学生常常面临时间紧张、内容重复率高、逻辑结构混乱等难题。而随着AI技术的不断发展,AI写作工具逐渐成为提升论文效率和质量的…

作者头像 李华
网站建设 2025/12/18 20:38:14

非期望超效率SBM模型:Matlab实现与探讨

非期望超效率SBM模型代码 使用计算方式为:Matlab,适用于截面数据,时间序列数据和面板数据等。 本文附带文件包括:Matlab工具包和1个视频教学文件,如果您看不懂本文,您可以选择看视频文件。 2002.0为SBM模型…

作者头像 李华