1. 简单工厂

又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。

Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。

2. 工厂方法(Factory Method)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

Spring中的FactoryBean就是典型的工厂方法模式。如下图:

3. 单例(Singleton)

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

Spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为Spring管理的是是任意的Java对象。

4. 适配器(Adapter)

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

Spring中在对于AOP的处理中有Adapter模式的例子,见如下图:

由于Advisor链需要的是MethodInterceptor(拦截器)对象,所以每一个Advisor中的Advice都要适配成对应的MethodInterceptor对象。

5.包装器(Decorator)

动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。基本上都是动态地给一个对象添加一些额外的职责。

6. 代理(Proxy)

为其他对象提供一种代理以控制对这个对象的访问。

从结构上来看和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。

Spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。

7.观察者(Observer)

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

Spring中Observer模式常用的地方是listener的实现。如ApplicationListener。

8. 策略(Strategy)

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

Spring中在实例化对象的时候用到Strategy模式,见如下图:

在SimpleInstantiationStrategy中有如下代码说明了策略模式的使用情况:

9.模板方法(Template Method)

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

Template Method模式一般是需要继承的。这里想要探讨另一种对Template Method的理解。Spring中的JdbcTemplate,在用这个类时并不想去继承这个类,因为这个类的方法太多,但是我们还是想用到JdbcTemplate已有的稳定的、公用的数据库连接,那么我们怎么办呢?我们可以把变化的东西抽出来作为一个参数传入JdbcTemplate的方法中。但是变化的东西是一段代码,而且这段代码会用到JdbcTemplate中的变量。怎么办?那我们就用回调对象吧。在这个回调对象中定义一个操纵JdbcTemplate中变量的方法,我们去实现这个方法,就把变化的东西集中到这里了。然后我们再传入这个回调对象到JdbcTemplate,从而完成了调用。这可能是Template Method不需要继承的另一种实现方式吧。

以下是一个具体的例子:

JdbcTemplate中的execute方法:

JdbcTemplate执行execute方法:

本文作者: java乐园

本文来自云栖社区合作伙伴“JAVA乐园”,了解相关信息可以关注“JAVA乐园”

Spring框架中的9种设计模式汇总相关推荐

  1. Spring中的9种设计模式汇总

    戳蓝字"CSDN云计算"关注我们哦! 文章来自:Java和Android架构 1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GO ...

  2. Spring框架中的设计模式(一)

    设计模式有助于遵循良好的编程实践.作为最流行的Web框架之一的Spring框架也使用其中的一些. 本文将介绍Spring Framework中使用的设计模式.这是5篇专题文章的第一部分.这次我们将发现 ...

  3. 盘点 Spring Security 框架中的八大经典设计模式

    上次有小伙伴建议,源码分析太枯燥了,要是能够结合设计模式一起来,这样更有助于大家理解 Spring Security 源码,同时还能复习一波设计模式. 因此松哥今天就试着整一篇,和大家来聊一聊 Spr ...

  4. Spring框架中常用的设计模式详解

    一.浅谈控制反转(IOC)与依赖注入(DI) IOC(Inversion of Control)是Spring中一个非常重要的概念,它不是什么技术,而是一种解耦的设计思想.它主要的额目的是借助于第三方 ...

  5. spring中用到的9种设计模式

    spring中用到了9种设计模式,学习spring的源码以及设计模式,可以提高开发人员软件设计以及开发的水平,写出更加优雅的代码. 文章目录 简单工厂(非23种设计模式中的一种) 工厂方法 单例模式 ...

  6. Spring框架中的控制反转和依赖注入

    控制反转: 控制反转是用来降低代码之间的耦合度的,基本思想就是借助"第三方"实现具有依赖对象的解耦. 为什么需要控制反转,因为项目中对象或多或少存在耦合.控制反转的关键在于Ioc容 ...

  7. Spring框架中的Bean

    1.什么是Bean? 在Spring框架中,Bean是指一个由Spring容器管理的对象.这个对象可以是任何一个Java类的实例,例如数据库连接.业务逻辑类.控制器等等.Bean实例的创建和管理是由S ...

  8. spring框架中用到了哪些设计模式

    spring框架中用到了哪些设计模式 1.工厂设计模式 pring使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象. 两者对比: BeanF ...

  9. c#中的23种设计模式

    C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...

最新文章

  1. 生命科学领域颠覆性技术——基因测序
  2. weka libsvm
  3. python正则表达式使用实例_正则表达式的基础知识,以及Python爬虫中的使用方法...
  4. Windows Azure 真实案例:CCH 财政服务独立软件开发商(ISV)通过托管服务获得了灵活性并节省成本...
  5. 编程语言基础 c语言同步教案,C语言程序设计基实验教案.doc
  6. 计算机培训专业中心架,ASEM工业电脑工业计算机全系列自动化产品-销售中心
  7. 黄渤高情商:小S和林志林同时掉到水里,你先救谁
  8. git全局配置用户名和密码_git---全局设置用户名、密码、邮箱
  9. 数据接口请求异常:parerror_什么是接口的幂等性,如何实现接口幂等性?
  10. E9流程表单中动态自定义添加button js代码
  11. Java打印菱形(一)
  12. MATLAB图像分割系统设计
  13. 微信卡包系列-核销微信卡券优惠券
  14. PhoneGap 外掛程式開發指南
  15. vc 热键、组合键的用法 MFC c++ hotkey WM_HOTKEY
  16. VM/VB虚拟机镜像
  17. LeetCode_904 水果成篮
  18. java 宕机_Java应用/JVM宕机排查步骤操作
  19. 用c语言写一个简易的四则运算计算器
  20. CE训练教程进阶,步骤 9: 注入++

热门文章

  1. linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程...
  2. csh for循环_shell中的for循环用法详解_linux shell
  3. 论文的“面子”与“里子”
  4. 基于Salmon的转录组定量流程
  5. SLAM学习--视觉slam学习教材推荐(附相关技术文档下载链接)
  6. char与TCHAR相互转化
  7. mysql my-small.ini_MySql优化之my-small.ini配置
  8. python 可变参数 关键字参数_Python之 可变参数和关键字参数
  9. VTLN(Vocal Tract Length Normalisation)
  10. 音高和基频(Pitch and F0)