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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值