Spring 框架中使用了许多设计模式,以下列举⼀些⽐较重要的:
重点 :单例、代理、⼯⼚、责任链
1、单例模式:
Spring 的 Bean 默认是单例模式,通过 Spring 容器管理 Bean 的⽣命周期,保证每个 Bean 只被创建⼀次,并在整个应⽤程序中重⽤。
2、⼯⼚模式:
Spring 使⽤⼯⼚模式通过 BeanFactory ApplicationContext 创建并管理 Bean 对象。
3、代理模式:
Spring AOP 基于动态代理技术,使⽤代理模式实现切⾯编程,提供了对 AOP 编程的⽀持。
4、观察者模式:
Spring 中的事件机制基于观察者模式,通过ApplicationEventPublisher 发布事件,由ApplicationListener 监听事件,实现了对象间的松耦合。
5、模板⽅法模式:
Spring 中的 JdbcTemplate 使⽤了模板⽅法模式,将⼀些固定的流程封装在⽗类中,⼦类只需实现⼀些抽象⽅法即可。
6、策略模式:
Spring 中的 HandlerInterceptor 和 HandlerExecutionChain 使⽤了策略模式,允许开发者⾃定义处理器拦截器,按照⼀定顺序执⾏。
7、责任链模式:
Spring 中的过滤器和拦截器使⽤了责任链模式,多个过滤器和拦截器按照⼀定顺序执⾏,每个过滤器和拦截器可以拦截请求或者响应并做出相应的处理。
Spring 框架中充分利⽤了许多设计模式,可以良好的扩展性和灵活性,降低代码的耦合度,提⾼代码的可维护性
补课:一些常见的设计模式及其简要说明:
1. 单例模式 (Singleton Pattern)
作用: 确保一个类只有一个实例,并提供全局访问点。
示例: 常用于数据库连接、日志记录器等。
2. 工厂模式 (Factory Pattern)
作用: 封装对象的创建过程,客户端无需直接创建对象,而是通过工厂方法获取对象。
示例: 常用于创建不同类型的对象,如各种产品对象。
3. 抽象工厂模式 (Abstract Factory Pattern)
作用: 提供一个接口,用于创建一组相关或依赖的对象,而不需要指定具体的类。
示例: 用于创建不同操作系统的界面组件。
4. 建造者模式 (Builder Pattern)
作用: 将一个复杂对象的构建过程分解为多个简单步骤,使得客户端可以灵活地构建对象。
示例: 常用于创建具有多个配置选项的对象。
5. 原型模式 (Prototype Pattern)
作用: 通过复制现有对象来创建新对象,避免了直接实例化。
示例: 常用于创建相似但有些差异的对象。
6. 适配器模式 (Adapter Pattern)
作用: 将一个接口转换成另一个客户端期望的接口,使不兼容的类可以一起工作。
示例: 用于兼容不同版本或接口的类。
7. 装饰器模式 (Decorator Pattern)
作用: 动态地给对象添加新功能,而不需要修改其原始代码。
示例: 用于扩展对象的行为,如添加日志记录、加密等功能。
8. 观察者模式 (Observer Pattern)
作用: 定义一种一对多的依赖关系,当一个对象状态发生改变时,其所有依赖对象都会得到通知并自动更新。
示例: 用于实现事件处理、消息通知等。
9. 策略模式 (Strategy Pattern)
作用: 定义一系列算法,将其封装成独立的策略类,使得算法可以相互替换,客户端可以灵活选择使用的策略。
示例: 用于实现不同的排序算法、计算方式等。
10. 责任链模式 (Chain of Responsibility Pattern)
作用: 将请求传递给一系列处理者,每个处理者决定是否处理请求,从而形成一个处理链。
示例: 用于处理请求的逻辑链,如权限验证、日志记录等。
11. 模板方法模式 (Template Method Pattern)
作用: 定义一个算法的骨架,将具体步骤延迟到子类中实现,以便子类可以改变算法的某些步骤而不改变其结构。
示例: 用于定义通用的算法流程,如图形界面组件的生命周期。