Spring 框架中用到的设计模式。常见设计模式总结以及其作用简要说明

news/2024/11/22 22:17:06/

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)

作用: 定义一个算法的骨架,将具体步骤延迟到子类中实现,以便子类可以改变算法的某些步骤而不改变其结构。
示例: 用于定义通用的算法流程,如图形界面组件的生命周期。


http://www.ppmy.cn/news/1114369.html

相关文章

C++ 太卷,转 Java?

最近看到知乎、牛客等论坛上关于 C 很多帖子,比如: 2023年大量劝入C 2023年还建议走C方向吗? 看了一圈,基本上都是说 C 这个领域唯一共同点就是都使用 C 语言,其它几乎没有相关性。 的确是这样,比如量化交…

按键点亮led灯

原理图: K0这个按键按下时,开发板D1这个灯亮,松开,灯灭 代码如下: #include "stm32f4xx.h" void LED_Init(void) {//1.定义一个GPIO外设的结构体变量 GPIO_InitTypeDef GPIO_InitStructure;//RCC_AHB1PeriphClockCmd(RCC_AHB1Pe…

【微信小程序】文章设置

设置基本字体样式:行高、首行缩进 font-size: 32rpx;line-height: 1.6em;text-indent: 2em;padding: 20rpx 0;border-bottom: 1px dashed var(--themColor); 两端对齐 text-align: justify; css文字两行或者几行显示省略号 css文字两行或者几行显示省略号_css…

07. Skywalking 服务监控和链路追踪

Spring Cloud 微服务系列文章,点击上方合集↑ 1. 简介 SkyWalking是一个针对分布式系统的应用程序性能监视工具和分析平台,它是基于Java Agent探针的技术,对服务进行监控和追踪,具有零侵入性特点。 SkyWalking对运行中的服务进…

JavaWeb的基本概念

一、Web基本概念 Web的基本结构: 1.客户端的概述 1.1. 客户端的作用 与用户进行交互,用于接收用户的输入(操作)、展示服务器端的数据以及向服务器传递数据 1.2. 常见的客户端 PC端网页: 移动端: Iot设备: 2…

记一次线程堵塞(挂起)导致消息队列积压

1 背景 A服务作为生产者,每天发送上千万的mq消息,每一个消息包含500个用户ids数据。B服务作为消费者,接受MQ消息并通过http调用第三方请求进行业务处理,消费组启用了rabbitmq的多线程消费组,一个实例并发40个mq消费者…

OJ练习第176题——第二高的薪水

第二高的薪水 力扣链接:176. 第二高的薪水 题目描述 示例 MySQL select max(salary) as SecondHighestSalary from Employee where salary ! (select max(salary) as salary from Employee); #去掉最大后,再去取最大,就是第二大select (s…

DMA简单总结

文章目录 一、基础概念1.1 DMA---Direct Memory Access 直接存储器访问,目的减少CPU资源占用 二、典型DMA硬件模型2.1 基本硬件特性---通道数、源/目标类型,地址与累加方式,数据位宽,搬移长度,循环模式,中断…