在Spring 当中存在的八大模式

在Spring 当中存在的八大模式

文章目录

  • 在Spring 当中存在的八大模式
  • 每博一文案
  • 1. 简单工厂模式
  • 2. 工厂方法模式
  • 3. 单例模式
  • 4. 代理模式
  • 5. 装饰器模式
  • 6. 观察者模式
  • 7. 策略模式
  • 8. 模板方法模式
  • 最后:

每博一文案

我认为 “知世故而不世故” 才是真正意义上的成熟。回归到小孩子的纯真和本心,经过岁月的洗礼和自我挣扎,兜兜转转,最后回归本我,找回初心。然而“初心是什么?”是小孩子的本性?是不畏惧他人眼光勇于做自己?是抛开世俗的观念,兜兜转转绕回到原点的真实?还是和想爱的人在一起因为三观而非其他?是不把他人的想法驾凌在自己之上,是回归到本我?真正的勇敢,是在这现实的世界里,理性浪漫主义般的活着。理想主义的可爱会让一个人不那么世俗化。而非世俗化就会显得不世故,在一些人看来就是不成熟,于是就幼稚了。无论“幼稚”还是“成熟”,本质上都是每个人基于自己的个性特点和社会环境,所作出的选择。它意味着你能承担“幼稚”或“成熟”所带来的风险与损失,也努力追求它所带来的收益与快乐。如果我们承认,人和人与生俱来的不一样。也承认,在一个发达的现代社会,我们可以以无数种方式去获得成功。甚至,连成功的定义,都可以由自己决定。那么,我们的生命应该会活得自由、珍重,而更有质感一点点吧。

在 Spring 当中存在着如下23种设计模式当中的 八大模式

  1. 简单工厂模式
  2. 工厂方法模式
  3. 单例模式
  4. 代理模式
  5. 装饰器模式
  6. 观察者模式
  7. 策略模式
  8. 模板方法模式

1. 简单工厂模式

BeanFactory 的 getBean() 方法,通过唯一的标识来获取 Bean 对象,就是典型的简单工厂模式(静态工厂模式) 。简单工厂模式步属于23种设计模式的任何一种.

想要进一步,学习工厂方法模式,大家可以移步至:✏️✏️✏️ GoF之工厂模式-CSDN博客

2. 工厂方法模式

FactoryBean 是典型的工厂方法模式,在配置文件种通过 factory-method 属性来指定工厂方法,该方法时一个实例方法。

想要进一步,学习工厂方法模式,大家可以移步至:✏️✏️✏️ GoF之工厂模式-CSDN博客

3. 单例模式

Spring 用的是双重判断加锁的单例模式,请看下面代码:

在这里插入图片描述

由于单例模式,涉及的篇幅过多,大家可以移步至:✏️✏️✏️ 23种设计模式:单例设计模式(饿汉式 VS 懒汉式)_单件模式 饿汉式csdn-CSDN博客

4. 代理模式

Spring的 AOP 就是使用动态代理实现的。

想要进一步,更加深入的了解代理模式,大家可以移步至:✏️✏️✏️ GoF之代理模式(静态代理+动态代理(JDK动态代理+CGLIB动态代理带有一步一步详细步骤))-CSDN博客

5. 装饰器模式

JavaSE中的IO流是非常典型的装饰器模式。
Spring 中配置 DataSource 的时候,这些dataSource可能是各种不同类型的,比如不同的数据库:Oracle、SQL Server、MySQL等,也可能是不同的数据源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。
这时,能否在尽可能少修改原有类代码下的情况下,做到动态切换不同的数据源?此时就可以用到装饰者模式。
Spring根据每次请求的不同,将dataSource属性设置成不同的数据源,以到达切换数据源的目的。
Spring中类名中带有:Decorator和Wrapper单词的类,都是装饰器模式。

6. 观察者模式

定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。Spring中观察者模式一般用在listener的实现。
Spring中的事件编程模型就是观察者模式的实现。

在Spring中定义了一个ApplicationListener接口,用来监听Application的事件,Application其实就是ApplicationContext,ApplicationContext内置了几个事件,其中比较容易理解的是:ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent、ContextClosedEvent

7. 策略模式

策略模式是行为性模式,调用不同的方法,适应行为的变化,强调父类的调用子类的特性。

getHandler 是 HandlerMapping 接口中的唯一方法,用于根据请求找到匹配的处理器。

比如我们自己写了 AccountDao 接口,然后这个接口下有不同的实现类:AccountDaoForMySQL,AccountDaoForOracle。对于service 来说不需要关心底层具体的实现,只需要面向 AccountDao 接口调用,底层可以灵活切换实现,这就是策略模式。

8. 模板方法模式

Spring 中的 JdbcTemplate 类就是一个模板类。

它就是一个模板方法设计模式的体现,在模板类的模板方法 execute() 中编写核心算法,具体的实现步骤在子类中完成。想要进一步了解,模板方法模式,大家可以移步至:✏️✏️✏️ 23种设计模式之 : 模板方法设计模式_模板实例的设计模式有哪些-CSDN博客

最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

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

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

相关文章

【PPT密码】PPT文件的两种不可编辑情况

不知道大家有没有遇到过,PPT文件无法编辑的情况,今天小编分享两种ppt文件不可编辑的原因以及解决方法。 情况一 如果打开ppt文件之后,发现幻灯片某些地方或者每张幻灯片同一个地方,无法编辑,这可能是因为PPT中设置了…

ISCC 2024 部分wp

文章目录 一、Misc1、Number_is_the_key2、FunZip3、擂台—— 重“隐”;4、RSA_KU5、时间刺客6、成语学习7、 精装四合一8、钢铁侠在解密9、有人让我给你带个话10、Magic_Keyboard11、工业互联网模拟仿真数据分析 二、Web1、还没想好名字的塔防游戏2、代码审计3、原…

Python数据分析实验四:数据分析综合应用开发

目录 一、实验目的与要求二、主要实验过程1、加载数据集2、数据预处理3、划分数据集4、创建模型估计器5、模型拟合6、模型性能评估 三、主要程序清单和运行结果四、实验体会 一、实验目的与要求 1、目的: 综合运用所学知识,选取有实际背景的应用问题进行…

【Python】【Scrapy 爬虫】理解HTML和XPath

为了从网页中抽取信息,必须对其结构有更多了解。我们快速浏览HTML、HTML的树状表示,以及在网页上选取信息的一种方式XPath。 HTML、DOM树表示以及XPath 互联网是如何工作的? 当两台电脑需要通信的时候,你必须要连接他们&#xff…

Android Studio实现MQTT协议的连接

1添加依赖 在项目中找到下图文件 打开文件 如下 plugins {alias(libs.plugins.android.application) }android {namespace "com.example.mqtt_04"compileSdk 34defaultConfig {applicationId "com.example.mqtt_04"minSdk 27targetSdk 34versionCo…

小红书无限加群脚本无需ROOT【使用简单无教程】

小红书无限加群脚本无需ROOT,包含了对应的小红书版本【使用简单无教程】 链接:https://pan.baidu.com/s/1HkLhahmHDFMKvqCC3Q3haA?pwd6hzf 提取码:6hzf

【Vue】computed 和 methods 的区别

概述 在使用时,computed 当做属性使用,而 methods 则当做方法调用computed 可以具有 getter 和 setter,因此可以赋值,而 methods 不行computed 无法接收多个参数,而 methods 可以computed 具有缓存,而 met…

Python函数、类和方法

大家好,当涉及到编写可维护、可扩展且易于测试的代码时,Python提供了一些强大的工具和概念,其中包括函数、类和方法。这些是Python编程中的核心要素,可以帮助我们构建高效的测试框架和可靠的测试用例。 本文将探讨Python中的函数、…

大语言模型的工程技巧(三)——分布式计算

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文将讨论如何利用多台机器进行神经网络的分布式训练。利用多台机器来加速大语言模型的训练,是其获得成功的重要原…

BUUCTF靶场[Web] [极客大挑战 2019]Havefun1、[HCTF 2018]WarmUp1、[ACTF2020 新生赛]Include

[web][极客大挑战 2019]Havefun1 考点:前端、GET传参 点开网址,发现是这个界面 点击界面没有回显,老规矩查看源代码,看到以下代码 代码主要意思为: 用get传参,将所传的参数给cat,如果catdog…

Linux基础(五):常用基本命令

从本节开始,我们正式进入Linux的学习,通过前面的了解,我们知道我们要以命令的形式使用操作系统(使用操作系统提供的各类命令,以获得字符反馈的形式去使用操作系统。),因此,我们是很有…

【全开源】点餐小程序系统源码(ThinkPHP+FastAdmin+UniApp)

基于ThinkPHPFastAdminUniApp开发的点餐微信小程序,类似肯德基,麦当劳,喜茶等小程序多店铺模式,支持子商户模式,提供全部前后台无加密源代码和数据库,支持私有化部署。 革新餐饮行业的智慧点餐解决方案 一…

【vue-6】监听

一、监听watch 完整示例代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…

【MATLAB源码-第213期】基于matlab的16QAM调制解调系统软硬判决对比仿真,输出误码率曲线对比图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 一、16QAM调制原理 在16QAM&#xff08;16 Quadrature Amplitude Modulation&#xff09;调制中&#xff0c;一个符号表示4个比特的数据。这种调制方式结合了幅度调制和相位调制&#xff0c;能够在相同的频谱资源下传输更多…

EEGLAB的相关使用

目录 概念 1.安装EEGLAB 2.文件实例演示 导入数据集处理 &#xff08;1&#xff09;导入数据集 &#xff08;2&#xff09;画图 &#xff08;3&#xff09; 修改并存储数据集 &#xff08;4&#xff09; 保存数据集 &#xff08;5&#xff09; 删除数据集 &#xff0…

技术前沿 |【BLIP:统一理解和生成的自举多模态模型研究】

BLIP&#xff1a;统一理解和生成的自举多模态模型研究 摘要引言一、BLIP模型概述二、 BLIP模型在多模态任务中的应用三、总结 摘要 本文介绍了BLIP&#xff08;Bootstrapping Language-Image Pre-training&#xff09;模型&#xff0c;一个前沿的多模态模型&#xff0c;通过自…

散列(哈希)及其练习题(基础)

目录 散列 字符出现次数 力扣经典题&#xff1a;两数之和 集合运算 交 并 差 字符串的出现次数 散列 导入&#xff1a; 有N个数和M个数&#xff0c;如何判断M个数中每个数是否在N中出现&#xff1f; 思想&#xff1a;空间换时间 创建hashtable&#xff0c;以N个数本…

图_基础算法

图这种数据结构还有一些比较特殊的算法&#xff0c;比如二分图判断&#xff0c;有环图无环图的判断&#xff0c;拓扑排序&#xff0c;以及最经典的最小生成树&#xff0c;单源最短路径问题&#xff0c;更难的就是类似网络流这样的问题。 先看拓扑排序&#xff08;有环无环&…

【linux性能分析】heaptrack分析内存占用

文章目录 1. Heaptrack是什么2. Heaptrack有哪些功能3. Heaptrack和valgrind massif对比4. Heaptrack安装5. Heaptrack生成追踪文件6. heaptrack_gui进行内存分析7. heaptrack_print也能用于堆分析8. 报错解决9. 补充介绍&#xff1a;heaptrack编译安装 1. Heaptrack是什么 he…

内网穿透--Spp-特殊协议-上线

免责声明:本文仅做技术交流与学习... 目录 spp项目: 一图通解: 1-下载spp 2-服务端执行命令 3-客户端执行命令 4-服务端cs监听&生马 spp项目: GitHub - esrrhs/spp: A simple and powerful proxy 支持的协议&#xff1a;tcp、udp、udp、icmp、http、kcp、quic 支持的…