工厂模式
- 概念:工厂模式是一种创建对象的设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离。通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。
- 应用场景:在Spring中,当我们配置了一个
Bean
后,比如配置了一个UserService
,ApplicationContext
就像一个工厂,当其他组件需要使用UserService
时,不需要自己去new
一个UserService
对象,只需要从ApplicationContext
这个工厂中获取即可。Spring会负责创建和管理UserService
对象的生命周期。
单例模式
- 概念:单例模式确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。在整个应用程序中,无论在何处请求获取该类的实例,都是同一个实例对象。
- 应用场景:在Spring项目中,如果有一个
DataConfig
类用于配置数据库连接等信息,通常会将其定义为单例Bean
。因为整个应用程序只需要一份数据库连接配置信息,多个组件都可以共享这个DataConfig
实例来获取数据库连接参数等信息,避免了重复创建造成的资源浪费和配置不一致问题。
代理模式
- 概念:代理模式是为一个对象提供一个代理对象,代理对象可以在不改变原对象的基础上,对原对象的方法进行增强或控制访问。代理对象和原对象实现相同的接口,客户端通过代理对象来访问原对象的方法。
- 应用场景:假设在一个电商系统中,有一个
OrderService
负责处理订单相关业务。如果要为订单处理添加事务管理功能,就可以使用Spring的AOP来创建一个OrderService
的代理对象。在代理对象中,当调用createOrder
等方法时,会在方法执行前后添加开启事务、提交事务或回滚事务等逻辑,而OrderService
本身不需要修改任何代码。
模板方法模式
- 概念:模板方法模式定义了一个操作中的算法骨架,将一些步骤延迟到子类中实现。子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
- 应用场景:以
JdbcTemplate
为例,在数据访问层,对于不同的数据库操作,如查询用户信息、查询订单列表等,都可以使用JdbcTemplate
。JdbcTemplate
提供了query
等模板方法,它内部定义了获取连接、执行SQL、处理结果等通用步骤,而具体的SQL语句和结果集处理逻辑则由用户自定义的子类或匿名内部类来实现。
观察者模式
- 概念:观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
- 应用场景:在一个Spring Boot的用户注册系统中,当用户注册成功后,可能需要发送欢迎邮件、推送注册成功消息等多个操作。可以定义一个
UserRegisteredEvent
事件,当用户注册成功时发布这个事件。然后有EmailSenderListener
和MessagePusherListener
等多个监听器,它们都实现了ApplicationListener
接口来监听UserRegisteredEvent
事件。当事件发布后,这些监听器都会收到通知并执行相应的操作。
策略模式
- 概念:策略模式定义了一系列算法,将每个算法都封装起来,并且使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。
- 应用场景:在一个文件上传系统中,可能需要支持将文件上传到本地文件系统、阿里云OSS或腾讯云COS等不同的存储策略。可以定义一个
ResourceLoader
接口,然后有LocalFileSystemResourceLoader
、AliyunOSSResourceLoader
、TencentCOSResourceLoader
等实现类。在配置文件中可以指定使用哪种资源加载策略,Spring会根据配置创建相应的ResourceLoader
实例来实现不同的文件上传功能。
装饰器模式
- 概念:装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。它通过创建一个包装对象,也就是装饰器,来包裹原始对象,并在不改变原始对象的基础上,为其添加额外的行为或功能。
- 应用场景:在一个Web应用中,有一个
UserService
用于处理用户相关业务。如果需要在用户登录时增加日志记录功能,可以创建一个UserServiceDecorator
类来装饰UserService
。UserServiceDecorator
持有一个UserService
实例,在login
方法中,先调用原UserService
的login
方法进行登录验证,然后添加日志记录逻辑。
适配器模式
- 概念:适配器模式将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作。
- 应用场景:在一个Spring MVC项目中,不同的前端框架可能会以不同的格式发送请求数据。假设有的框架发送的是JSON格式,有的发送的是XML格式。可以使用
HandlerAdapter
来适配不同的请求处理方法。HandlerAdapter
可以将不同格式的请求数据转换为Spring MVC能够处理的统一格式,然后交给相应的Controller
方法进行处理。
责任链模式
- 概念:责任链模式是一种行为设计模式,它将请求发送者和接收者解耦,使多个对象都有机会处理请求,从而避免请求发送者与接收者之间的耦合关系。这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
- 应用场景:在 Spring 框架中,责任链模式常用于请求处理、拦截器等场景。比如在 Spring MVC 中,多个拦截器可以组成一条责任链,对客户端的请求进行依次处理。每个拦截器都可以对请求进行检查、修改或者决定是否继续将请求传递给下一个拦截器,这样可以实现对请求的多样化处理,如权限验证、日志记录、数据转换等功能,使代码更加模块化和可扩展。