Spring中的9种设计模式汇总

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


文章来自:Java和Android架构


1. 简单工厂

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

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

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

 

2. 工厂方法(Factory Method)

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

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

640?wx_fmt=png

 

3. 单例(Singleton)

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

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

 

4. 适配器(Adapter)

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

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

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

 

5.包装器(Decorator)

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

640?wx_fmt=png

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

 

6. 代理(Proxy)

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

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

640?wx_fmt=png

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

 

7.观察者(Observer)

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

640?wx_fmt=png

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

 

8. 策略(Strategy)

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

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

640?wx_fmt=png

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

640?wx_fmt=png

 9.模板方法(Template Method)

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

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

以下是一个具体的例子:

JdbcTemplate中的execute方法:

640?wx_fmt=png

JdbcTemplate执行execute方法:

640?wx_fmt=png

推荐阅读

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

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

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

  • Java 12 要来了!

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

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

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



1.微信群:

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


2.征稿:

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


640?wx_fmt=gif点击“阅读原文”,打开 CSDN App 阅读更贴心!

640?wx_fmt=png喜欢就点击“好看”吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云漫圈 | 什么是微服务?

戳蓝字“CSDN云计算”关注我们哦!作者:小灰来源:程序员小灰单体架构的痛点缺点一:项目过于臃肿当大大小小的功能模块都集中在同一项目的时候,整个项目必然会变得臃肿,让开发者难以维护。缺点二:…

五分钟解读“大数据”

戳蓝字“CSDN云计算”关注我们哦!文章来自:鲜枣课堂作者:小枣君大家好,我是小枣君。2019年的第一篇文章,我们来聊聊大数据。这些年,大数据作为一个时髦概念,出现频率很高,关注度也很…

数据版吐槽大会: 国产综艺节目年终盘点

戳蓝字“CSDN云计算”关注我们哦!作者介绍:徐麟,目前就职于互联网公司数据部,哥大统计数据狗,从事数据挖掘&分析工作,喜欢用R&Python玩一些不一样的数据个人公众号:数据森麟&#xff08…

2018全球50大最佳发明名单

戳蓝字“CSDN云计算”关注我们哦!来自:全国3D大赛提起发明创造,你会想到什么?每年《时代周刊》都会评选年度最佳发明,它们让世界变得更美好,更智能,或更有趣。Time 从世界各地征集了各类别的提名…

虚拟化精华问答 | 什么是虚拟化?

戳蓝字“CSDN云计算”关注我们哦!虚拟化是云计算的基础,基于虚拟化我们可以实现私有云、公有云、桌面云等。它的主要目的是对IT基础设施进行简化,简化对资源以及对资源管理的访问。那么今天就让我们一起就来探究云计算关键技术「虚拟化技术」…

要闻君说:难道金山云与京东云真的要合并了吗?中国联通获准发行不超过500亿元公司债券,都用于5G 商用?用AI技术精准来找室友?...

关注并标星星CSDN云计算每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨,大家好!偶是要闻君。愉快的周一从“听歌看新闻”开始啦!文/要闻君图片来源网络近日,阿里巴巴宣布推出“A100”战略合作伙伴计划&a…

对不起,我就是喜欢问你Spring构造器注入原理

戳蓝字“CSDN云计算”关注我们哦!文章来自:Java和Android架构作者:Static_lin原文:https://blog.csdn.net/qq_41737716/article/details/85596817前言Spring IOC是面试常问的知识点。本文讲述了从自定义注册Bean开始,到…

华为云发布新slogan,新年伊始加速奔跑

人工智能作为下一轮科技革命的关键元素,正在进入越来越多的行业,用AI的技术和理念去解决现在和未来的问题,将是企业构建竞争力的关键。 人工智能时代,最有技术和值得信赖的云 1月11日,“华为云普惠AI”年度峰会在北京…

云头条 |华为云发布全新Slogan;AWS推出DocumentDB;FRB信号刷屏

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,头条君带来的【云头条】特别栏目,如期而至,每周二第一时间为大家带来头条新闻。把握技术风向标,了解行业应用与实践,就交给我头条君吧!头…

一篇文章带你快速理解微服务架构,由浅入深带你走进微服务架构的核心

戳蓝字“CSDN云计算”关注我们哦!文章来自:Java和Android架构什么是微服务首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。传统的WEB应用核心分为业务逻…

云存储精华问答 | 云计算和云存储是什么关系?

戳蓝字“CSDN云计算”关注我们哦!早在2006年谷歌推出的“Google101计划”时,“云”的概念及理论被正式提出,随后亚马逊、微软、IBM等公司宣布了各自的“云计划”,云存储、云安全等相关的云概念相继诞生。今天,我们就一…

边缘计算精华问答 | 为什么需要边缘计算?

戳蓝字“CSDN云计算”关注我们哦!云计算就像是天上的云,看得见摸不着,像章鱼的大脑,边缘计算就类似于八爪鱼的那些小爪子,一个爪子就是一个小型的机房,靠近具体的实物。那么,云计算的下一个爆点…

8 年后重登王座,Python 再度成为 TIOBE 年度编程语言

戳蓝字“CSDN云计算”关注我们哦!文章来自:开源中国社区全球知名的编程语言流行度排行榜网站 TIOBE 于近日宣布:Python 成为 2018 年度编程语言,理由如下:2018 年,Python 语言上升了 3.62% &…

要闻君说:Intel要“起底”新任CEO了?微软停止支持Win 7?OPPO加入WPC无线充电联盟,15W无线闪充技术呼之欲出!...

关注并标星星CSDN云计算每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨,大家好!偶是要闻君。咱们还是闲话少叙,边听边看近日有啥大新闻鸭!文/要闻君图片来源网络空缺半年多,Intel或在10天内任…

Ubuntu上安装Hadoop集群

戳蓝字“CSDN云计算”关注我们哦!前面我们介绍了在Ubuntu上安装Hadoop单机版。但是我们知道,Hadoop在实际工作中都是以集群的形式存在的,毕竟需要处理大量的数据,单机的处理速度显然不能满足。所以这篇文章我们就来介绍一下如何在…

Gartner的预言:通向混合IT之旅

戳蓝字“CSDN云计算”关注我们哦!“企业上云之旅是一个非常复杂的旅程,因为它不仅仅只是对基础设施的升级,还是对应用的整个生命周期管理的升级和业务交付模式的升级。”Gartner高级研究总监季新苏在近日举行的媒体见面会上表示。“这个旅程不…

OpenStack精华问答 | OpenStack是操作系统?

戳蓝字“CSDN云计算”关注我们哦!关于OpenStack的探讨几乎从未间断,从2010年10月份一个版本正式发布至今,OpenStack在8年发展历程中,成为了最有争议的那一个。今天,我们就来看看有关于OpenStack的精华问答吧1Q&#xf…

有问有答 | 精华问题汇总

出品 | CSDN云计算 有问有答,一问一答的形式,帮助大家快速解决更多专业难题。 边缘计算精华问答 | 边缘计算有哪些应用场景? 物联网对物联网技术的快速发展和云服务的推动使得云计算模型已经不能很好的解决现在的问题,于是&…

云重磅栏目专题汇总

嗨,大家好,头条君带来的【云重磅】特别栏目,会在每周二第一时间为大家带来头条新闻。把握技术风向标,了解行业应用与实践,就交给我头条君吧! 云重磅 | 阿里云开源Blink;华为发布5G Cloud VR&am…

云漫圈栏目精华汇总

云漫圈,用漫画的形式,帮你轻松掌握云中知识,从此周末不在寂寞。 云漫圈 | 学Python还是Java, 8张漫画带你全面分析 Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手…