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

news2025/1/13 3:32:40

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

在这里插入图片描述

文章目录

  • ✨ 介绍一下常见的设计模式
  • ✨ 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.coloradmin.cn/o/2275779.html

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

相关文章

单通道串口服务器(三格电子)

一、产品介绍 1.1 功能简介 SG-TCP232-110 是一款用来进行串口数据和网口数据转换的设备。解决普通 串口设备在 Internet 上的联网问题。 设备的串口部分提供一个 232 接口和一个 485 接口,两个接口内部连接,同 时只能使用一个口工作。 设 备 的网 口…

【蓝牙】win11 笔记本电脑连接 hc-06

文章目录 前言步骤 前言 使用电脑通过蓝牙添加串口 步骤 设置 -> 蓝牙和其他设备 点击 显示更多设备 更多蓝牙设置 COM 端口 -> 添加 有可能出现卡顿,等待一会 传出 -> 浏览 点击添加 hc-06,如果没有则点击 再次搜索 确定 添加成…

信息安全、网络安全和数据安全的区别和联系

信息安全、网络安全和数据安全是信息安全领域的三大支柱,它们之间既存在区别又相互联系。以下是对这三者的详细比较: 一.区别 1.信息安全 定义 信息安全是指为数据处理系统建立和采用的技术和管理的安全保护,保护计算机硬件、软件和数据不…

oracle闪回表

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

如何让QPS提升20倍

一、什么是QPS QPS,全称Queries Per Second,即每秒查询率,是用于衡量信息检索系统(例如搜索引擎或数据库)或请求-响应系统(如Web服务器)每秒能够处理的请求数或查询次数的一个性能指标。以下是…

vue 实现打包并同时上传至服务器端

将 publish_script 及以下文件 upload.server.js 添加到 主文件下,与 src 同级别 具体操作步骤: 1、安装 npm install scp2 2、将下面两条命令加入至 package.json 的 scripts 中 "upload": "node publish_script/upload.server.js&q…

2015年IMO第3题

△ A B C \triangle ABC △ABC 的垂心为 H H H, A H AH AH 为直径的圆交 △ A B C \triangle ABC △ABC 的外接圆 ⨀ O \bigodot O ⨀O 于 A A A, Q Q Q. H Q HQ HQ 为为直径的圆交 ⨀ O \bigodot O ⨀O 于 Q Q Q, K K K. M M M 为 B C BC BC 边中点, F F F 为 A…

新活动平台建设历程与架构演进

01 前言 历时近两年的重新设计和迭代重构,用户技术中心的新活动平台建设bilibili活动中台终于落地完成!并迎来了里程碑时刻 —— 接过新老迭代的历史交接棒,从内到外、从开发到搭建实现全面升级,开启了活动生产工业化新时代&#…

《安富莱嵌入式周报》第348期:开源低功耗测试仪,开源创意万用表,续航100-300小时,开源PCB电机,自制shell和网络协议栈,开源水培自动化系统

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1Tzr9Y3EQ7/ 《安富莱嵌入式周报》第348期:开源低功…

【Kaggle】练习赛《预测贴纸的销量》(下)

前言 上篇利用各地区的GDP数据还填充目标标签的缺失值;中篇顺着这个思路,利用这个原理来预测未来的销量,具体方法思路:先一一对国家、产品和商店进行汇总,然后对未来三年的每日销售额进行预测,然后再进行分…

RT-DETR代码详解(官方pytorch版)——参数配置(1)

前言 RT-DETR虽然是DETR系列,但是它的代码结构和之前的DETR系列代码不一样。 它是通过很多的yaml文件进行参数配置,和之前在train.py的parser argparse.ArgumentParser()去配置所有参数不同,所以刚开始不熟悉代码的时候可能不知道在哪儿修…

细说STM32F407单片机以DMA方式读写外部SRAM的方法

目录 一、工程配置 1、时钟、DEBUG、GPIO、CodeGenerator 2、USART3 3、NVIC 4、 FSMC 5、DMA 2 (1)创建MemToMem类型DMA流 (2)开启DMA流的中断 二、软件设计 1、KEYLED 2、fsmc.h、fsmc.c、dma.h、dma.c 3、main.h…

Proteus-8086调试汇编格式的一点心得

这阵子开始做汇编的微机实验(微机原理与接口技术题解及实验指导,吴宁版本13章),中间出了挺多问题,解决后记录下。 先上电路图 用子电路来仿真发现仿真的时候子电路这块根本没有高低电平输出,只好把子电路拿…

FreeROTS学习 内存管理

内存管理是一个系统基本组成部分,FreeRTOS 中大量使用到了内存管理,比如创建任务、信号量、队列等会自动从堆中申请内存,用户应用层代码也可以 FreeRTOS 提供的内存管理函数来申请和释放内存 FreeRTOS 内存管理简介 FreeRTOS 创建任务、队列…

【西北工业大学主办 | EI检索稳定 | 高H值专家与会报告】2025年航天航空工程与材料技术国际会议(AEMT 2025)

2025 年航天航空工程与材料技术国际会议(AEMT 2025)将于2025年2月28日至3月2日在中国天津召开。本届会议由西北工业大学主办,由北京航空航天大学、北京理工大学作为支持单位加入,AEIC 学术交流中心协办。 AEMT 2025 旨在汇聚来自全…

目标检测跟踪中的Siamese孪生网络与普通卷积网络(VGG、ResNet)有什么区别?

1、什么是Siamese网络? Siamese网络又叫孪生网络,是一种特殊的神经网络架构,由一对(或多对)共享参数的子网络组成,用于学习输入样本之间的相似性或关系。最早在 1994 年由 Bromley 等人提出,最…

网络攻击行为可视化分析系统【数据分析 + 可视化】

一、系统背景 随着信息技术的快速发展,网络已成为现代社会不可或缺的一部分。然而,与此同时,网络攻击手段也日益多样化和复杂化,给企业和个人的信息安全带来了极大的威胁。传统的网络攻击分析方法往往依赖于人工分析和处理大量的…

一个运行在浏览器中的开源Web操作系统Puter本地部署与远程访问

文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站…

C语言 操作符_位操作符、赋值操作符、单目操作符

1.位操作符 & - 按(2进制)位与 | - 按(2进制)位或 ^ - 按(2进制)位异或 只适用于整型 例:实现交换两个变量的值,要求不能新建变量 //3^3 0 -> a^a 0 //011 //011 //000 …

图像处理 | 图像二值化

在图像处理领域,图像二值化是一个重要的操作,它将彩色或灰度图像转换为只有两种颜色(通常是黑白)的图像。二值化广泛应用于文字识别、图像分割、边缘检测等领域,尤其在处理简洁和高对比度的图像时非常有效。本文将深入…