【设计模式】介绍常见的设计模式

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

在这里插入图片描述

文章目录

  • ✨ 介绍一下常见的设计模式
  • ✨ Spring 中常见的设计模式

这期内容主要是总结一下常见的设计模式,可能很多小伙伴们对了解,但是说出来总觉得有点不太对劲~ 这里作出以下总结~

✨ 介绍一下常见的设计模式

如果是介绍一下常见的设计模式,可以先举例介绍一下常见的设计模式,然后说一下这些模式的具体应用,如在 Spring 中的应用

  • 单例模式:单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供全局访问点,比如在 Spring 中,所有的 Bean 默认是单例,每个 Bean 只会被创建一次,并且可以在整个应用程序中共享。

  • 代理模式:代理模式是一种结构型设计模式,它允许开发人员在不修改原有的代码情况下,向应用程序中添加新的功能,比如在 Spring AOP 面向切面编程就是使用的代理模式实现的,它允许开发人员在方法调用前后执行一些自定义的操作,如日志记录、权限控制、性能监控等。

  • 工厂模式:工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,使得应用程序可以更加灵活和可维护,比如在 Spring 中,BeanFactory 就是工厂模式的实现,使用它的工厂模式就可以创建出来其他的 Bean 对象。

  • 观察者模式:定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。例如,实现事件驱动、消息传递等功能时,可以使用观察者模式,比如 Spring 事件驱动模型就是观察者模式的实现。

  • 策略模式:策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户,比如 Spring 中的框架加载。

  • 装饰器模式:装饰器模式是一种结构型模式,允许向一个现有的对象添加新的功能,同时又不改变其结构。创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能,灵活的替代继承的方式来扩展功能。比如 Spring MVC 的拦截器 Interceptor 可以看作是一种装饰器模式的应用。

  • 适配器模式:适配器模式是一种结构型设计模式,它允许开发人员将一个类的接口转换成另一个类的接口,以满足客户端的需求。比如在 Spring 中,适配器模式常用于将不同类型的对象转换成统一的接口,比如 Servlet API 转换成 Spring MVC 的控制器接口。

  • 模版方法模式:模版方法模式是最常用的设计模式之一,它是指定义一个操作算法的骨架,而将一些步骤的实现延迟到子类中去实现,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。此模式是基于继承的思想实现代码复用的。比如 MyBatis 中的典型代表 BaseExecutor,在 MyBatis 中 BaseExecutor 实现了大部分 SQL 执行的逻辑。

✨ Spring 中常见的设计模式

如果是介绍 Spring 中常见的设计模式,直接举例说明 Spring 中哪个地方使用了什么设计模式

  • 单例模式:Bean 的行为模式,Bean 默认创建的是单例。Spring 默认将所有 bean 声明为单例,当容器启动时,每个 bean 只会被初始化一次,后续对同一 bean 的所有请求都会返回相同的实例,例如,通过 SingletonBeanRegistry 接口保证单例 bean 在整个应用上下文只存在一个实例。
  • 代理模式:Spring 的实现原理,通过代理模式管理对象 Spring AOP 面向切面编程大量使用了代理模式,它利用 JDK 动态代理 或 CGLIB 库生成代理对象,实现代理功能以添加额外的横切关注点,如事务处理、日志记录、权限控制等。
  • 工厂模式:Spring 通过 BeanFactory 接口及其实现类如 ApplicationContext 等,为应用程序提供了一个统一的 bean 工厂,负责创建和管理各种 bean 对象。
  • 观察者模式:Spring 事件驱动模型实现了观察者模式,通过 ApplicationEventPublisher 发布和监听事件,例如 ContextRefreshedEvent、SessionDestroyedEvent 等。
  • 策略模式:Spring 框架中的资源加载(Resource)就是一个策略模式的例子,根据不同的资源路径,Spring 会选择合适的策略,如ClassPathResource、FileSystemResource 等,进行资源加载。
  • 装饰器模式:Spring MVC 的拦截器 Interceptor 可以看作是一种装饰器模式的应用,它允许我们包装 HandlerExcutionChain,在执行处理器方法前后插入自定义行为。
  • 适配器模式:Spring 通过适配器模式整合不同类型的组件,比如对第三方数据源的连接池,进行适配,使其能够与 Spirng 容器无缝集成。
  • 模版方法模式:在 Spring JDBC 等模块中,提供了如 JdbcTemplate 这样的模板类,它们封装数据访问逻辑,而具体的操作由用户提供的 SQL 来实现。

✨✨✨本期内容到此结束啦~

单例模式可回顾往期内容:【多线程】单例模式

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

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

相关文章

6 分布式限流框架

限流的作用 在API对外互联网开放的情况下,是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下,会导致接口占用大量的服务器资源,使得接口响应效率的降低或者超时,更或者导致服务器宕机。 限流是指对应用服务进行限制…

【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题

本篇鸡汤:没有人能替你承受痛苦,也没有人能拿走你的坚强. 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:带你解答洛谷的括号序列问题(绝对巧解) 制作日期:2025.01.10 隶属专栏:C/C题…

数据库高安全—角色权限:权限管理权限检查

目录 3.3 权限管理 3.4 权限检查 书接上文数据库高安全—角色权限:角色创建角色管理,从角色创建和角色管理两方面对高斯数据库的角色权限进行了介绍,本篇将从权限管理和权限检查方面继续解读高斯数据库的角色权限。 3.3 权限管理 &#x…

深入浅出负载均衡:理解其原理并选择最适合你的实现方式

负载均衡是一种在多个计算资源(如服务器、CPU核心、网络链接等)之间分配工作负载的技术,旨在优化资源利用率、提高系统吞吐量和降低响应时间。负载均衡的实现方式多种多样,以下是几种常见的实现方式: 1. 硬件负载均衡&…

Training-free regional prompting for diffusion transformers

通过语言模型来构建位置关系的,omnigen combine来做位置生成,其实可以通过大模型来做,不错。 1.introduction 文生图模型在准确处理具有复杂空间布局的提示时仍然面临挑战,1.通过自然语言准确描述特定的空间布局非常困难,特别是当对象数量增加或需要精确的位置控制时,2.…

麦田物语学习笔记:背包物品选择高亮显示和动画

如题,本篇文章没讲动画效果 基本流程 1.代码思路 (1)先用点击事件的接口函数去实现,点击后反转选择状态(isSelected),以及设置激活状态(SetActive),并且还需要判断该格子是否为空,空格子是点不动的,完成后以上后,出现的问题是高亮应该是有且仅有一个格子是高亮的,而现在可以让…

Linux:深入了解fd文件描述符

目录 1. 文件分类 2. IO函数 2.1 fopen读写模式 2.2 重定向 2.3 标准文件流 3. 系统调用 3.1 open函数认识 3.2 open函数使用 3.3 close函数 3.4 write函数 3.5 read函数 4. fd文件描述符 4.1 标准输入输出 4.2 什么是文件描述符 4.3 语言级文件操作 1. 文件分类…

数据结构:栈(Stack)和队列(Queue)—面试题(一)

目录 1、括号匹配 2、逆波兰表达式求值 3、栈的压入、弹出序列 4、最小栈 1、括号匹配 习题链接https://leetcode.cn/problems/valid-parentheses/description/ 描述: 给定一个只包括 (,),{,},[,] …

51单片机(一) keil4工程与小灯实验

直接开始 新建一个工程 在这里插入图片描述 添加文件 另存为 添加文件到组 写下一个超循环系统代码 调整编译项编译 可以在工程目录找到编译好的led_fst.hex 自行烧写到各自的开发板。 会看到什么都没有。 现在定义一个GPIO端口与小灯的连接,再点亮小灯…

基于 Python 和 OpenCV 的人脸识别上课考勤管理系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

Vue2:el-table中的文字根据内容改变颜色

想要实现的效果如图,【级别】和【P】列的颜色根据文字内容变化 1、正常创建表格 <template><el-table:data="tableData"style="width: 100%"><el-table-column prop="id" label="ID"/> <el-table-column …

案例研究:UML用例图中的结账系统

在软件工程和系统分析中&#xff0c;统一建模语言&#xff08;UML&#xff09;用例图是一种强有力的工具&#xff0c;用于描述系统与其用户之间的交互。本文将通过一个具体的案例研究&#xff0c;详细解释UML用例图的关键概念&#xff0c;并说明其在设计结账系统中的应用。 用…

73.矩阵置零 python

矩阵置零 题目题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a; 题解思路分析Python 实现代码代码解释提交结果 题目 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例…

C++【深入底层,从零模拟实现string类】

在学习了类和对象、模板等前期的C基础知识之后&#xff0c;我们可以尝试根据C标准库中所提供的接口类型&#xff0c;来搭建我们自己的string类型。这个过程有助于初学者掌握C的基础语法及底层逻辑。 框架的搭建 首先搭建模型的基础框架&#xff0c;需要建立my_string.h和my_st…

切忌 SELECT *,就算表只有一列

原文地址 尽量避免 SELECT *&#xff0c;即使在单列表上也是如此 – 如果你现在不同意这一点&#xff0c;读完这篇文章&#xff0c;你可能就要动摇了。 2012年的一个故事 这是我 12 年前&#xff08;约 2012-2013 年&#xff09;在客户后台应用程序中遇到的一个真实故事。 当…

DEV C++软件下载

一、进入网站 https://sourceforge.net/projects/orwelldevcpp/ 二、点击下载 三、安装步骤 1、点击 “OK” 2、点击“I agree” 3、点击“Next” 4、按步骤切换路径&#xff0c;本文选在D盘&#xff0c;可自行选取文件路径 5、等待安装 6、点击完成 7、选择语言 8、点击“N…

OpenBSD之安装指南

安装介质下载 OpenBSD的官网下载地址&#xff1a;https://www.openbsd.org/faq/faq4.html#Download&#xff0c;同时也是《OpenBSD FAQ - Installation Guide》。长篇大论了很多&#xff0c;每一个章节都能看懂是干嘛的&#xff0c;连起来就容易晕。并且是英文的&#xff0c;要…

Vue.config.productionTip = false 不起作用的问题及解决

文章目录 一、问题描述二、解决方法 一、问题描述 当我们在代码页面上引入Vue.js(开发版本)时&#xff0c;运行代码会出现以下提示&#xff0c;这句话的意思是&#xff1a;您正在开发模式下运行Vue&#xff0c;在进行生产部署时&#xff0c;请确保打开生产模式 You are runni…

C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序

1 欧拉路径 欧拉路径是图中每一条边只访问一次的路径。欧拉回路是在同一顶点上开始和结束的欧拉路径。 这里展示一种输出欧拉路径或回路的算法。 以下是Fleury用于打印欧拉轨迹或循环的算法&#xff08;源&#xff09;。 1、确保图形有0个或2个奇数顶点。2、如果有0个奇数顶…

oracle闪回表

文章目录 闪回表案例1&#xff1a;&#xff08;未清理回收站时的闪回表--成功&#xff09;案例2&#xff08;清理回收站时的闪回表--失败&#xff09;案例3&#xff1a;彻底删除表&#xff08;不经过回收站--失败&#xff09;案例4&#xff1a;闪回表之后重新命名新表总结1、删…