戳蓝字“CSDN云计算”关注我们哦!

文章来自:Java和Android架构

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方法:

推荐阅读

  • 官宣!张小龙史上最长演讲 4小时3万字完整版回应微信的一切

  • Spark+Alluxio性能调优十大技巧

  • 有问有答 | 容器精华问答,如何玩转容器服务?

  • Java 12 要来了!

  • “微信之父”张小龙:我没去过龙泉寺!

  • 代码“大换血”,以太坊能耗将减少99%背后的故事

  • 从云计算到AI:NetApp的数据网络转型之道

1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。

点击“阅读原文”,打开 CSDN App 阅读更贴心!

喜欢就点击“好看”吧!

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

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

    1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类. ...

  2. MyBatis 和 Spring 中的 23 种设计模式,真香,拿去用吧!

    学习源码框架,为什么要从Mybatis框架入手?在 MyBatis 3.5.1 这个版中有 968 个类. 2770 个字段. 8422个方法. 42504 行代码. 186428个指令码.其源码体量 ...

  3. Spring中的九种设计模式

    一. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类. ...

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

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

  5. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  6. spring中的设计模式_面试官:来给我说一下 Spring 中使用了哪些设计模式?

    文章来源:itxxz.com/a/javashili/tuozhan/2014/0601/7.html 导读:设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直 ...

  7. 【java】java开发中的23种设计模式详解

    设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  8. spring中涉及到的设计模式

    1.简单工厂(非23种设计模式中的一种) 实现方式:BeanFactory.Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后 ...

  9. Spring中所使用的设计模式

    Spring是一个非常优秀的开源框架,项目源码中所使用的设计模式随处可见,这篇文章主要记录一下Spring中常见的设计模式: (1)工厂模式:Spring使用工厂模式,通过BeanFactory和Ap ...

最新文章

  1. Vue:echarts的柱状图怎样按照比例缩小?
  2. 微信小程序网络请求代码片段
  3. 分析以太网帧结构_传统以太网中的——中继器及集线器
  4. 算法:排序算法的比较
  5. 1分钟了解区块链的本质
  6. 学习Java: Queue
  7. 一次失败的项目经理招聘经验
  8. mr图像翻转的原因_MRI图像常见问题及对策
  9. 厉害!中国AI企业50强榜单!看完员工待遇,网友:我酸了!
  10. linux格式化usb设备,如何在 usb linux下格式化磁盘
  11. 用idea给java项目打jar包
  12. HDU-3974 Assign the task 线段树 或 直接模拟多叉树 或 并查集 (三种方法)
  13. Unity3D(三)材质
  14. 打造国云安全品牌,铸牢企业云上安全防线
  15. 计算机菜单专业英语,InDesign中英文菜单对照表 -电脑资料
  16. 驱动仿真物品移动乌龟\Gazebo\cmd_vel和/gazebo/set_model_state
  17. Linux Cgroup cpu子系统实验
  18. 数据结构考研复习 | Fibonacci数列的递归、数组、迭代(循环)实现及其时间复杂度
  19. 现代企业管理笔记——控制
  20. 数据类型扩展及面试题讲解

热门文章

  1. p50会搭载鸿蒙吗,华为Mate40和华为P50也会搭载鸿蒙,华为Mate30跌至白菜价让路
  2. linux显示点阵字体,Fedora 17中文字体显示点阵状的解决方法
  3. python virtualenv_python开发之virtualenv与virtualenvwrapper讲解
  4. 天才王垠惊人言论炸翻网友:相对论是假说,爱因斯坦是民科!
  5. 我国共招过多少博士?多少硕士?数据来了!
  6. 32年寻获上帝粒子,华人女学者自述高能人生故事
  7. 约翰·格伦:77岁宇航员的传奇一生
  8. cross-entropy函数
  9. 基于MaxCompute+PAI的用户增长方案实践
  10. 快速上手,使用 Kotlin 把支付宝小程序装进自己的 App