软件高级架构师 - 设计模式

server/2025/3/1 20:35:02/

六大原则

1. 单一职责原则

一个类只负责一项职责。

案例
餐厅中的厨师和服务员:
厨师的职责是做饭,服务员的职责是上菜。
如果让厨师同时负责做饭和上菜,会导致职责混乱,效率降低。

2. 开放-封闭原则(OCP)

对扩展开放,对修改封闭。

案例
乐高积木:
乐高的基础模块是固定的(封闭的),但可以通过组合这些模块扩展出各种形状和结构(开放的)。
你不需要修改基础模块,只需添加新的组合方式。

3. 里氏替换LSP原则

子类必须能替换父类,不影响程序正确性。

案例
交通工具:
汽车和自行车都是交通工具的子类。
如果你用自行车替换汽车,仍然可以完成“从 A 到 B”的任务,因为它们都遵循交通工具的基本行为。

4. 依赖倒转原则

高层模块和低层模块都应依赖抽象,而不是具体实现。

案例
电源适配器:
电器(高层模块)不直接依赖电源插座(低层模块),而是依赖一个通用的电源接口(抽象)。
电源适配器(抽象)将插座的具体电压转换为电器需要的电压。

5. 接口隔离原则

客户端不应依赖它不需要的接口,接口应尽量细化。
接口应该尽量细化,每个接口只包含客户端需要的方法。
不要让一个接口承担过多的职责,否则会导致实现类不得不实现一些不需要的方法。

案例
多功能工具 vs 专用工具:
【不符合】多功能工具(如瑞士军刀)包含很多功能,但你可能只需要其中的一两个。
【符合】专用工具(如螺丝刀)只专注于一个功能,更符合实际需求。

6. 迪米特法则原则

合理引入一个第三者来降低现有对象之间的耦合度。

案例
公司中的沟通:
如果你需要财务部的帮助,应该通过你的直属上级(直接朋友)去沟通,而不是直接找财务部的员工(陌生人)。
这样可以减少不必要的依赖和混乱。

设计模式汇总

在这里插入图片描述

创建型

	工厂模式:动态生成对象抽象工厂模式:动态生成系列对象构建器模式:复杂对象构造原型模式:克隆对象单例模式:单实例

结构型

	适配器模式:转化接口桥接模式:抽象和实现分离组合模式:树形目录结构装饰模式:动态附加职责外观模式:统一对外接口享元模式:汉字编码代理模式:代理人

行为型

	职责链模式:传递职责,审批流命令模式:日志记录,可撤销解释器模式:虚拟机机制迭代器模式:循环中介者模式:中间件,不直接引用备忘录模式:快照观察者模式:订阅,事件驱动,watch等状态模式:状态变为类策略模式:多方案切换模板方法模式:框架访问者模式:数据不会变,操作可变动,数据与操作分离

http://www.ppmy.cn/server/171622.html

相关文章

Apache Doris 索引的全面剖析与使用指南

搞大数据开发的都知道,想要在海量数据里快速查数据,就像在星图里找一颗特定的星星,贼费劲。不过别慌,数据库索引就是咱们的 “定位神器”,能让查询效率直接起飞!就拿 Apache Doris 这个超火的分析型数据库来…

RFID:汽车智能化产线工艺加工的指挥棒

RFID:汽车智能化产线工艺加工的指挥棒 南通某汽车涂装装配现场问题: 目前使用视觉读取二维码的形式,二维码的数据无法重复利用。因为现场有喷漆的工艺,二维码被漆挡住了就无法识别。无法修改数据,所以无法告诉下一道…

Opencv 图像形态学操作

3.1 形态学-腐蚀操作 img cv2.imread(CSDN.png) cv2.imshow(CSDN, img) cv2.waitKey(0) cv2.destroyAllWindows如果腐蚀核的覆盖区域内的所有像素值都满足条件(阈值),则中心像素的值保持不变;如果有任何像素值不满足条件&#x…

原子性(Atomicity)和一致性(Consistency)的区别?

原子性(Atomicity)和一致性(Consistency)是数据库事务ACID特性中的两个核心概念,虽然它们密切相关,但解决的问题和侧重点完全不同。原子性关注事务的操作完整性,而一致性关注数据的逻辑正确性。…

蓝桥杯 之 填空题-位运算与循环

文章目录 循环握手问题门牌制作-循环小球反弹幸运数艺术与篮球跑步 位运算3个1美丽的2024 位运算 可以关注这个Lowbit(x) 如何判断最低位是否是1? num&1 1就说明num最低位是1 循环 循环 握手问题 握手问题 思路分析: 可以直接计算出来&#xff…

深度学习-136-LangGraph之应用实例(五)构建RAG问答系统同时从不同的角度对比优化效果

文章目录 1 大语言模型2 小粒度分割文档2.1 处理文本构建Document2.2 向量存储2.3 创建图2.4 测试调用3 大粒度分割文档3.1 构建Document3.2 向量存储3.3 创建图3.4 测试调用4 总结与优化4.1 问题分析4.2 对比不同的返回文档数4.3 对比不同的嵌入模型4.3.1 嵌入模型nomic-embed…

docker本地镜像源搭建

最近Deepseek大火后,接到任务就是帮客户装Dify,每次都头大,因为docker源不能用,实在没办法,只好自己搭要给本地源。话不多说具体如下: 1、更改docker的配置文件,添加自己的私库地址&#xff0c…

win11编译pytorchvision cuda128版本流程

1. 前置条件 本篇续接自 win11编译pytorch cuda128版本流程,阅读前请先参考上一篇配置环境。 访问https://kkgithub.com/pytorch/vision/archive/refs/tags/v0.21.0.tar.gz下载源码,下载后解压。 2.编译 打开Miniforge Prompt,依次执行如…