《笑谈设计模式》 — 23种尝鲜版(未完待续......

news2024/11/15 6:41:54

        引子:无论在平时开发过程中,还是深夜研读源码亦或者面试时都对遇到——设计模式。比如说Spring中的单例模式(bean单例)、工厂模式(bean创建)、代理模式(动态代理)、策略模式等。我们将设计模式分为创建型、结构型、行为性三大类。本篇文章带你一次搞定23种设计模式。

Spring中设计模式
工厂模式 (Factory Pattern)
        Spring 使用工厂模式来创建和管理对象。
        例如,可以通过配置文件或注解定义工厂方法,让 Spring 根据需要创建相应的对象实例。
单例模式 (Singleton Pattern)
        Spring 容器默认将 Bean 定义为单例模式,即每个 Bean 组件在 Spring 容器中只有一个实例。
        这种模式减少了对象的创建和销毁次数,提高了性能和资源利用率。
策略模式 (Strategy Pattern)
        在 Spring Boot 应用中,当需要根据不同条件执行不同的算法或行为时,可以使用策略模式。
        例如,定义一系列的算法,并将它们封装在一起,以便可以根据条件选择使用其中的一个。
代理模式 (Proxy Pattern)
        Spring AOP(面向切面编程)使用代理模式来实现横切关注点(如事务管理、日志记录等)。
        通过代理对象来包装目标对象,从而在不修改原有代码的情况下添加新的功能。
模板方法模式 (Template Method Pattern)
        Spring 中的 JdbcTemplate 和其他类似的 DAO 支持类使用了模板方法模式。
        它定义了一个算法的骨架,而将一些步骤延迟到子类中实现。
观察者模式 (Observer Pattern)
        用于处理事件监听和发布订阅模式。
        Spring 中的事件传播机制就使用了观察者模式。
适配器模式 (Adapter Pattern)
        当需要将一个类的接口转换成客户端期望的另一个接口时,可以使用适配器模式。
        例如,在集成第三方服务时,可能需要适配其接口与现有系统兼容。
装饰器模式 (Decorator Pattern)
        用于动态地给一个对象添加一些额外的职责。
        Spring 中的 AOP 可以看作是一种特殊的装饰器模式应用。
这些设计模式在 Spring Boot 中的应用可以帮助开发者编写更加灵活、模块化和易于扩展的代码。

Q&A:什么是设计模式?

        设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当⻓的一段时间的试验和错误总结出来的。

        设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

Q&A:软件设计原则有哪些?

  1. 开闭原则(Open Closed Principle,OCP)
  2. 单一职责原则(Single Responsibility Principle, SRP)
  3. 里氏替换原则(Liskov Substitution Principle,LSP)
  4. 依赖倒置原则(Dependency Inversion Principle,DIP)
  5. 接口隔离原则(Interface Segregation Principle,ISP)
  6. 合成/聚合复用原则(Composite/Aggregate Reuse Principle,C/ARP)
  7. 最少知识原则(Least Knowledge Principle,LKP)或者迪米特法则(Law of Demeter,LOD)

一、创建型:未完待续

二、结构型:

三、行为型:

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

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

相关文章

RTA-VRTE适配Orin

RTA-VRTE适配Orin sudo minicom -w -D /dev/ttyACM0 用户名 nvidia密码 123456底下的的rj45 ,对应的是eqos_0, (本次porting使用该接口)底下的的DEBUG(USB Micro-B)串口连接(本次porting使用该接口)上侧边的rj45,对应的是mgbe0_0#设置Orin的IP和默认网卡eqos_0

C语言:一维、二维数组详解

目录 一、数组的概念 二、一维数组创建和初始化 2.1 数组创建 2.2 数组的初始化 2.3 数组的类型 三、一维数组的使用 3.1 数组的下标 3.2 数组的输入与输出 四、⼀维数组在内存中的存储 五、sizeof计算数组元素个数 六、二维数组 6.1 二维数组的概念 6.2 二维数组…

虚幻游戏开发 | shader性能优化

如何查看shader性能消耗 1.Alt 8切换Shader Complexity mode查看shader性能消耗 (Alt 4切换回Lit Mode正常光照模式) 2.材质蓝图里查看instructions数量(如图中箭头所示) 3.直接在target platform上测试是最准确的。 (running fewer instru…

思特科技案例:北京欢乐谷光影乐园

01      在北京欢乐谷的亲子领域,藏着一处“面积近400平米,炫酷堪比魔法世界的、美轮美奂的光影空间,做到了“让娃来了不想走,一玩就是一下午”。    思特科技案例:北京欢乐谷光影乐园      02      作…

去抖音视频水印的软件免费推荐,精选四款实用工具助你轻松去除水印

随着抖音等短视频平台的流行,我们常常会遇到想要保存某些视频但不想保留水印的情况。本文将为您推荐四款去抖音视频水印的实用工具,帮助您轻松去除视频中的水印,保存清晰的内容。 工具一:奈斯水印助手(小程序) 推荐指数&#xf…

DMDSC学习

DMDSC学习 ​ DM 共享存储数据库集群,允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负载均衡等特性。DMDSC 支持故障自动切换和故障自动重加入,某一个数据库实例故障后,不会导致数据库服务无法提供。 DMDSC…

前端使用miniO上传文件

项目背景:vue2&#xff0c;前提是请先安装miniO,若安装引入时报错&#xff0c;那就是版本不对&#xff0c;通常指定版本安装即可。 页面样式&#xff1a; 前端vue页面代码&#xff1a; //<el-form>表单中:<el-form-item label"文件" prop"fileIds&q…

链表OJ题——反转一个单链表

文章目录 一、题目链接二、解题思路三、解题代码 一、题目链接 原地翻转链表 二、解题思路 原地翻转链表&#xff0c;空间复杂度为O(1)&#xff0c;时间复杂度O(n) 三、解题代码

亲测好用,吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【2024 更新】

废话不多说&#xff0c;直接分享正文~ 以下是小编为大家搜集到的最新的ChatGPT国内站&#xff0c;各有优缺点。 1、AI Plus&#xff08;稳定使用&#xff09; 推荐指数&#xff1a;⭐⭐⭐⭐⭐ yixiaai.com 该网站已经稳定运营了1年多了。2023年3月份第一批上线的网…

高速公路边坡在线监测预警系统

一、背景 近日&#xff0c;广东梅大高速发生严重塌方事故&#xff0c;造成了严重的人员伤亡和财产损失。这一事件在公众心中敲响了安全的警钟&#xff0c;再次引起了公众对于交通设施运营安全性的重点关注。 二、系统介绍 高速公路边坡在线监测预警系统通过结合北斗、5G、AI…

jstack结果提取特定线程池线程的堆栈

这里假设你已经知道如何定位java进程PID&#xff0c;以及如何执行jstack命令进行导出&#xff0c;下面仅提供相关命令&#xff0c;及示例 ps aux|grep java jstack 8229 > jstack_output.log v1版本 grep second jstack_output.log 如果此时我们想重点关注一下下面这个线程…

极简接入|七牛云 QPlayer2 播放器再升级

1877 年&#xff0c;爱迪生发明留声机&#xff0c;用锡箔筒捕捉了第一缕声波。随后&#xff0c;黑胶唱片、磁带录音机、八轨盒式磁带机、卡式磁带、激光唱片&#xff08;CD&#xff09;等相继问世。 每一次介质的变革&#xff0c;都带来了音质的提升和便捷性的增强。时光流转&a…

LLM概念梳理(一):训练流程之PT、SFT和PO

一个LLM的成功问世&#xff0c;一般分为&#xff1a;预训练 PT监督微调 SFT偏好优化 PO。 预训练&#xff08;Pre-Training&#xff09;是为了让模型学习通用知识&#xff0c;而监督微调&#xff08;Supervised Fine-Tuning&#xff09;是为了优化模型在特定任务上的表现。为了…

TypeScript学习笔记1---认识ts与js的异同、ts的所有数据类型详解

前言&#xff1a;去年做过几个vue3js的项目&#xff0c;当时考虑到时间问题&#xff0c;js更加熟悉&#xff0c;学习成本低一点&#xff0c;所以只去了解了vue3。最近这段时间补了一下ts的知识点&#xff0c;现今终于有空来码文章了&#xff0c;做个学习总结&#xff0c;方便以…

360驱动大师 v2.0.0.2040 最新免费精简单文件版

360驱动大师是一款专注于驱动安装和更新的专业软件&#xff0c;它拥有庞大的驱动库&#xff0c;能够支持数以百万计的不同类型的驱动程序。 它的设计理念是简化驱动管理和更新的过程&#xff0c;让用户能够轻松地保持系统的最新状态&#xff0c;从而获得更好的性能和稳定性。无…

Linux高编-进程的概念(1)

目录 1.ps aux 2.top 3.kill -2 进程pid // fork函数 getpid拿自己的进程号 getppid拿父进程号 fork&#xff08;&#xff09;&&fork&#xff08;&#xff09;||fork&#xff08;&#xff09; 父子进程的关系&#xff1a; 僵尸进程&#xff0c;孤儿进程 僵…

zookeeper源码分析之事务请求处理

一.参考 zookeeper启动和选举的源码分析参考之前的帖子. 二.源码 1.职责链模式. 每次经过的processor都是异步处理&#xff0c;加入当前processor的队列&#xff0c;然后新的线程从队列里面取出数据处理. PrepRequestProcessor 检查ACL权限,创建ChangeRecord. SyncRequest…

用Python更改Word文档文本的字体

更改文字字体是编辑和美化Word文档时的一项常见需求&#xff0c;使用合适的字体不仅可以提升文档的整体视觉效果&#xff0c;还能突显关键信息&#xff0c;使得内容更加突出。然而&#xff0c;手动更改每一个文字的字体既繁琐又费时。因此&#xff0c;掌握一种高效的方法来自动…

verilog当中仿真的时候赋值用=还是<=

【总结&#xff1a;<是所有数据同时变化&#xff0c;而是顺序执行。如果是左边数据的赋值都是不关联的&#xff0c;那么就可以用<&#xff0c;使所有赋值同时有效。如果有a和b都需要赋值&#xff0c;且b的值跟a有关的同时还需要一起变化&#xff0c;那么可以用】 一般情…

C++ UML 使用 doxygen 生成源码类图

一&#xff1a;安装 sudo apt install doxygensudo apt install doxygen-guisudo apt install graphviz graphviz-doc 二&#xff1a;使用 命令行输入 doxywizard&#xff0c;打开图形界面 参考&#xff1a; https://www.cnblogs.com/guohaoblog/p/15151353.html