设计模式学习(二十四):Spring 中使用到的设计模式

设计模式,学习,二十四,spring,使用 · 浏览次数 : 192

小编点评

**设计模式学习(二十四)** **Spring 中使用到的设计模式** **1. 事件监听器(Observer)** - 定义一个 `ApplicationEvent` 的继承类。 - 创建一个 `ApplicationListener` 实现了 `ApplicationListener` 接口。 - 在 `ApplicationContext` 中注册 `ApplicationListener`。 - 当 `ApplicationEvent` 触发时,执行监听器的方法。 **2. 策略模式(Strategy)** - 定义一个 `HandlerAdapter` 接口。 - 对每个控制器定义一个适配器类。 - 策略模式通过工厂方法创建不同的适配器类。 **3.组合模式(Composite)** - 扩展 `Cache` 接口,实现事务支持。 - 使用 `CacheDecorator` 将 `Cache` 增强到 `TransactionAwareCache`。 - 使用 `TransactionAwareCacheDecorator` 在事务提交和回滚时对 `Cache` 的数据进行处理。 **4. 单工模式(Singleton)** - 创建一个 `SingleObject` 类实现单实例。 - 使用 `Factory` 接口实现单实例的创建。 - 通过 `ApplicationContext` 获取单实例。 **5. 观察者模式(Observer)** - 定义一个 `Observable` 接口。 - 定义一个 `Observer` 接口实现 `Observable`。 - 观察者将被通知当任何事件发生时调用其回调方法。 **6. 适配器模式(Adapter)** - 继承 `HandlerAdapter` 接口实现适配器类。 - 对每个控制器定义对应的适配器类。 - 通过工厂方法创建不同的适配器类。 **7. 策略模式(Strategy)** - 在 `HandlerAdapter` 中定义不同的策略方法。 - 将不同的策略注入到相应的控制器中。 - 通过工厂方法创建不同的策略。

正文

设计模式学习(二十四):Spring 中使用到的设计模式

作者:Grey

原文地址:

博客园:设计模式学习(二十四):Spring 中使用到的设计模式

CSDN:设计模式学习(二十四):Spring 中使用到的设计模式

观察者模式

定义一个继承 ApplicationEvent 的事件;定义一个实现了 ApplicationListener 的监听器;定义一个发送者 DemoPublisher ,发送者调用 ApplicationContext 来发送事件消息。

模板方法

image

适配器模式

Spring 定义了统一的接口 HandlerAdapter ,并且对每种 Controller 定义了对应的适配器类。这些适配器类包括: AnnotationMethodHandlerAdapter 、 SimpleControllerHandlerAdapter 、 SimpleServletHandlerAdapter 等

策略模式

AopProxy 是策略接口, dkDynamicAopProxy、CglibAopProxy 是两个实现了 AopProxy 接口的策略类。策略的创建一般通过工厂方法来实现。对应到 Spring 源码, AopProxyFactory 是一个工厂类接口, DefaultAopProxyFactory 是一个默认的工厂类,用来创建 AopProxy 对象。

组合模式

CacheManager 组合 Cache

装饰器模式

TransactionAwareCacheDecorator 增加了对事务的支持,在事务提交、回滚的时候分别对 Cache 的数据进行处理。 TransactionAwareCacheDecorator 实现 Cache 接口,并且将所有的操作都委托给 targetCache 来实现,对其中的写操作添加了事务功能。这是典型的装饰器模式的应用场景和代码实现

工厂模式

BeanFactory 类和 ApplicationContext 相关类( AbstractApplicationContext、ClassPathXmlApplicationContext、FileSystemXmlApplicationContext等)

UML 和 代码

UML 图

代码

更多

设计模式学习专栏

参考资料

与设计模式学习(二十四):Spring 中使用到的设计模式相似的内容:

设计模式学习(二十四):Spring 中使用到的设计模式

设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring 中使用到的设计模式 观察者模式 定义一个继承 ApplicationEvent 的事件;定义一个实现

设计模式学习(二十):备忘录模式

设计模式学习(二十):备忘录模式 作者:Grey 原文地址: 博客园:设计模式学习(二十):备忘录模式 CSDN:设计模式学习(二十):备忘录模式 备忘录模式 备忘录模式是一种行为型模式。 用于记录对象的某个瞬间,类似快照的功能, 应用实例: 游戏中的「后悔药」; 打游戏时的存档; Windows

设计模式学习(二十一):命令模式

设计模式学习(二十一):命令模式 作者:Grey 原文地址: 博客园:设计模式学习(二十一):命令模式 CSDN:设计模式学习(二十一):命令模式 命令模式 命令模式是一种行为型模式。 通过调用者调用接受者执行命令,执行顺序是: 调用者→命令→接受者 ```, 如下示例,CopyCommand 中的

设计模式学习(二十二):解释器模式

设计模式学习(二十二):解释器模式 作者:Grey 原文地址: 博客园:设计模式学习(二十二):解释器模式 CSDN:设计模式学习(二十二):解释器模式 解释器模式 解释器模式是一种行为型模式。 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。 一般用于脚本语言

设计模式学习(二十三):中介模式

设计模式学习(二十三):中介模式 作者:Grey 原文地址: 博客园:设计模式学习(二十三):中介模式 CSDN:设计模式学习(二十三):中介模式 中介模式 中介模式是一种行为型模式。 举个简单的例子,如果一个聊天室里面的用户1和用户2要聊天,聊天室就相当于中介的地位,用户1和用户2只管调用发消息方

设计模式学习(二)工厂模式——抽象工厂模式+注册表

目录前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用简单工厂改进 对于缺点①,我们可以使用简单工厂的思路来改进抽象工厂的初版代码。对于上一篇文章中的例子,我们去除Came

设计模式学习(二)工厂模式——抽象工厂模式

目录背景抽象工厂模式优点与缺点参考文章 背景 现在我需要开发一个相机操作模块,它可能在Windows下运行,也可能在Linux下运行。由于在厂家提供的SDK中,Windows下的SDK和Linux下的SDK是有区别的,因此对于一个品牌的相机,我们要创建两个类去封装这两个不同平台下的API。 我们先使

设计模式学习(二)工厂模式——工厂方法模式+注册表

目录工厂方法模式的瑕疵注册表 工厂方法模式的瑕疵 在前一篇笔记中我们介绍了工厂方法模式,示例的类图如下: 考虑一种情况:现在要在程序运行时,根据外部资源,动态的实例化对象。也就是说在编译期我们无法知道要实例化的对象的类型。因此在实例化的过程中,就需要加以判断。 例如,在我的例子中,要根据连接到主机的

设计模式学习(二):单例模式

设计模式学习(二):单例模式 作者:Grey 原文地址: 博客园:设计模式学习(二):单例模式 CSDN:设计模式学习(二):单例模式 单例模式 单例模式是创建型模式。 单例的定义:“一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。”定

设计模式学习(十四):模板方法

设计模式学习(十四):模板方法 作者:Grey 原文地址: 博客园:设计模式学习(十四):模板方法 CSDN:设计模式学习(十四):模板方法 模板方法 模板方法是一种行为型模式。 假设我们要实现一个游戏,这个游戏有「初始化」,「启动」,「结束」三个方法,那么可以定义一个游戏的模板: public a