当前位置: 首页 > news >正文

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网关模式:外观模式的现代应用
  • 服务发现模式:单例模式和工厂模式的结合
  • 断路器模式:状态模式的实际应用
  • 配置中心模式:观察者模式的分布式实现
http://www.cnnetsun.cn/news/137555.html

相关文章:

  • 探秘常见机器人控制运动上位机源码:解锁多种运动算法
  • 9 个降AI率工具,继续教育学生必备!
  • 运用工具Postman快速导出python接口测试脚本
  • 研发管理软件:合规・协同・智能・灵活为汽车部件行业研发管理强力赋能——全星研发管理APQP软件系统功能解析
  • EMS-NT企业微电网能碳管理平台:架构、功能与应用研究
  • 读捍卫隐私10读后总结与感想兼导读
  • OpenAI发布GPT-5.2系列;谷歌推出Gemini Deep Research API:AI领域的最新战况与未来前景
  • 华为云国际站代理商的AS跨境有什么优势呢?
  • NPP 草原:美国中部平原实验牧场(SGS),1939-1990 年,R1
  • CCD相机同步外触发拍照抓拍识别高速脉冲计数器信号采集模块
  • 【网络安全】2025新手如何上手挖漏洞(非常详细)零基础入门到精通,看这篇就够了!
  • BurpSuite渗透测试通关手册,简单几步带你从环境配置到报告生成
  • Python | OpenCV | 图像处理 | 入门实验 | 对比度增强 | 裁剪
  • Apifox:API 接口自动化测试完全指南
  • 正反向代理:网络安全核心技术
  • 别被忽悠了!一文讲透MES管理系统本地部署与SaaS模式的真正底牌
  • 【毕业设计】基于springboot+微信小程序的羽球快讯爱好者平台小程序(源码+文档+远程调试,全bao定制等)
  • 小程序计算机毕设之基于SpringBoot的宠物领养微信小程序基于springboot+微信小程序的宠物领养系统小程序(完整前后端代码+说明文档+LW,调试定制等)
  • 小程序计算机毕设之基于springboot+微信小程序的大学生餐厅点餐系统小程序基于springboot微信小程序的校园食堂订餐服务系统(完整前后端代码+说明文档+LW,调试定制等)
  • 计算机小程序毕设实战-基于springboot+微信小程序的影院售票系统设计与实现基于SpringBoot的电影购票平台微信小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 计算机小程序毕设实战-基于springboot+微信小程序的羽球快讯爱好者平台小程序羽毛球场预定app_羽毛球预约管家【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 11、文本与盒子属性的CSS技巧解析
  • 23、WinJS控件样式与样式规则定位指南
  • 27、Windows 8 应用开发中的 SVG 样式设计
  • SAP ABAP拆分交货单数量、批次、存储地点 并过账
  • 基于MPC的智能车运动预测和控制算法 Motion predication; Kinemati...
  • Mathcad的野路子】11kW PFC参数计算书实战拆解
  • STM32学习笔记CAN
  • 搭建你的第一个“私有知识库” (RAG)
  • 13、Unix 系统磁盘管理与安全定位脚本实用指南