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功能式允许切面在目标对象的不同方法上执行特定的操作

相关推荐
m0_571957581 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
一点媛艺2 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风2 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生3 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2343 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程4 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk4 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go