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

Java 23种设计模式分类概括以及应用介绍

话不多说进入正题~

创建型模式:5种

单例模式(Singleton Pattern)
确保一个类只有一个实例,并提供全局访问点,它的主要目的是限制类的实例化并确保所有代码都共享相同的实例。

应用:Runtime类、数据库连接池、Spring Bean的单例模式,日志工具比如SLF4J,它们都只有一个全局对象

工厂模式(Factory Pattern)
将对象的实例化过程封装在一个工厂类中。通过使用工厂方法,可以根据需要创建不同类型的对象,而无需暴露具体的实例化逻辑

应用:Spring框架中的BeanFactory和ApplicationContex。它们负责创建和管理对象的实例,并将对象的创建逻辑封装在工厂类中,客户端通过工厂类获取所需的对象实例。

抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式提供了一种方式来创建一系列相关对象的接口,而无需指定具体的类

应用:JDBC API中的Connection接口和DriverManager类。Connection接口代表数据库连接对象的抽象,而DriverManager类充当了抽象工厂,负责创建特定数据库厂商的连接对象(比如Oracle、MySQL)

建造者模式(Builder Pattern)
用于创建复杂对象,通过将对象的构建过程分解为多个步骤,使得同样的构建过程可以创建不同的表示

应用:StringBuilder和StringBuffer类,它们通过提供一系列方法来动态构建字符串对象,允许按照特定的顺序添加、修改和组装字符串

原型模式(Prototype Pattern)
创建对象的克隆,通过复制现有对象的属性来创建新的对象,而无需通过实例化来创建。它能够提供一种更高效、更灵活的对象创建方式

应用:Java的Cloneable接口 ,实现它就具备了原型模式的能力,clone()方法会创建并返回一个新的对象副本,该副本拥有与原始对象相同的属性值。

结构型模式(Structural Patterns): 7种

适配器模式(Adapter Pattern)
(适配器类) 将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类可以协同工作

应用:Java集合之间的转换、IO流,比如InputStreamReader(将字节流转为字符流)

桥接模式(Bridge Pattern)
将抽象部分与实现部分分离,使它们可以独立地变化

应用:JDBC,抽象部分表示数据库连接的抽象接口,实现部分表示不同数据库的具体实现,而桥接接口充当连接抽象和实现的桥梁

组合模式(Composite Pattern)
通过使用相同的接口来处理单个对象和组合对象,组合模式使得客户端可以一致地对待它们

应用:Swing框架中的组件,各种UI组件(如按钮、文本框等)都可以作为单个对象,也可以组合

装饰器模式(Decorator Pattern)
在不改变现有对象结构的情况下,动态地将新功能附加到对象上

应用:IO流的设计

外观模式(Facade Pattern)
为复杂子系统提供一个简化的接口,以便客户端能够更轻松地使用该系统

应用:URL类,提供了一个简单的接口来处理URL的各种操作,隐藏了底层复杂的网络通信细节

享元模式(Flyweight Pattern)
通过共享对象来最大程度地减少内存使用和提高性能,通过创建一个工厂类来管理共享对象,并在需要时返回已存在的对象或创建新对象

应用:字符串常量池

代理模式(Proxy Pattern)
通过创建一个代理对象,控制对原始对象的访问。可以在访问原始对象之前或之后添加额外的逻辑,从而实现对原始对象的控制和扩展

应用:Java动态代理。在运行时动态地创建代理对象,通过代理对象来间接访问原始对象的方法和属性

行为型模式: 11种

责任链模式(Chain of Responsibility Pattern)
将请求发送者和接收者解耦,通过将多个对象组成一条责任链,依次处理请求,直到有一个对象能够处理它为止

应用:Servlet中的过滤器(Filter)、 Spring框架中的拦截器(Interceptor)

命令模式(Command Pattern)
将请求封装成一个对象,使得可以用不同的请求对客户端进行参数化。

应用: 线程池(ThreadPoolExecutor) 每个任务被封装为一个命令对象,线程池通过条件来调度。RabbitMQ每个消息被封装为一个命令对象

解释器模式(Interpreter Pattern)
该模式用于解释语言的语法或表达式,它定义了一个表达式接口,通过解释器来解释并执行特定的语法规则

应用:Java正则表达式、 XPath解析器、EL表达式

迭代器模式(Iterator Pattern)
提供了一种顺序访问聚合对象中各个元素的方法,而无需暴露聚合对象的内部表示

应用:Java集合框架的迭代器,IO流(readLine()方法)、ResultSet对象的next()方法

中介者模式(Mediator Pattern)
通过一个中介者对象来封装一系列对象之间的交互,使得对象之间不需要显式地相互引用,从而降低了耦合度

应用:JVM垃圾回收器、ApplicationContext:负责组件之间的通信和协调

备忘录模式(Memento Pattern)
保存对象的内部状态,并在需要时恢复到之前的状态,提供了一种捕获和恢复对象状态的机制

应用:Java事务管理(JTA)

观察者模式(Observer Pattern)
定义了一种一对多的依赖关系,使得多个观察者对象可以同时监听一个主题对象,当主题对象发生变化时,会通知所有观察者对象进行更新

应用:Java事件模型(EventObject)中的事件和监听器, Java消息服务(JMS)中消息的发布和订阅机制

状态模式(State Pattern)
允许对象在内部状态改变时改变它的行为,使得对象在不同状态下可以有不同的行为

应用:Java线程生命周期(Thread Lifecycle)、Java网络编程中的套接字(Socket)、JVM中的垃圾回收器(Garbage Collector)、Spring中的Bean生命周期

策略模式(Strategy Pattern)
该模式定义了一系列算法,并将每个算法封装到可互换的策略对象中,使得算法可以独立于使用它的客户端进行变化

应用:Java集合框架的比较器(Comparator)、Spring的事务管理器(TransactionManager)、Java线程调度器

模板方法模式(Template Method Pattern)
将算法的通用部分放在抽象类中,并将具体的实现细节延迟到子类中,以实现代码的复用和灵活性

应用: IO流设计、HttpServlet(doGet()、doPost()方法被子类重写)、Spring的JdbcTemplate

访问者模式(Visitor Pattern)
将数据结构与数据操作分离,使得可以在不改变数据结构的情况下定义新的操作

应用:Spring中的AOP功能式允许切面在目标对象的不同方法上执行特定的操作

http://www.lryc.cn/news/179953.html

相关文章:

  • 运筹优化算法常用求解器汇总
  • 字符串函数(一)
  • Ubuntu 安装 Docker 的详细步骤
  • 使用Python进行App用户细分
  • 博弈论——伯特兰德寡头模型(Bertrand Model)
  • 第一百六十回 SliverPadding组件
  • Mapfree智驾方案,怎样实现成本可控?
  • javascript: Bubble Sort
  • DM数据库根据rowid删除重复的记录
  • 【AI视野·今日Robot 机器人论文速览 第四十期】Mon, 25 Sep 2023
  • HashMap底层源码,数据结构
  • 计算机等级考试—信息安全三级真题八
  • 番外6:下载+安装+配置Linux
  • javascript验证表单字段有效性,使用checkValidity()方法和他的属性
  • pdf怎么调整大小kb?pdf文件过大这样压缩
  • vue3中的watch
  • 开绕组电机零序Bakc EMF-based无感控制以及正交锁相环inverse Park-based
  • 番外5:下载+安装+配置Linux
  • 新手--安装好Quartus II13.0(带modelsim集成包)并用Quartus II搭建一个工程
  • python监控软件内存、cpu和GDI
  • wordpress搭建自己的博客详细过程以及踩坑
  • 在jupyter中更改、增加内核
  • Redis代码实践总结(二)
  • 读取一张图片各种颜色占比
  • C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强
  • Blued引流脚本
  • 数据结构之美:如何优化搜索和排序算法
  • Unity 鼠标悬浮时文本滚动(Text Mesh Pro)
  • GNN PyG~torch_geometric 学习理解
  • ChatGPT 调教指南:从 PDF 提取标题并保存