【软考-架构】11.3、设计模式-新

news2025/3/16 18:50:47

✨资料&文章更新✨
GitHub地址:https://github.com/tyronczt/system_architect

文章目录

  • 项目中的应用
  • 设计模式
    • 创建型设计模式
    • 结构型设计模式
    • 行为型设计模式
  • 💯考试真题
  • 题外话

项目中的应用

在实际项目中,我应用过多种设计模式来解决不同的问题,以下是一些例子,助于理解记忆:

  1. 单例模式(Singleton Pattern)
  • 应用场景: 在电商平台中,我使用单例模式来管理全局唯一的订单 ID 生成器。
  • 解决问题: 确保系统中只有一个订单 ID 生成器实例,避免多个实例导致 ID 冲突,保证订单数据的准确性和一致性,同时节约系统资源。

2. 工厂模式(Factory Pattern)

  • 应用场景: 在支付模块中,我使用工厂模式根据不同的支付类型(如支付宝、微信支付、银行卡支付)创建不同的支付客户端。
  • 解决问题: 将支付客户端的创建逻辑与业务代码解耦,方便扩展新的支付方式,提高代码的可维护性和可扩展性,并简化了对象创建逻辑。

3. 策略模式(Strategy Pattern)

  • 应用场景: 在商品促销模块中,我使用策略模式根据不同的用户等级(如普通会员、VIP 会员、超级 VIP 会员)采用不同的促销策略。
  • 解决问题: 避免大量的 if-else 语句,将不同的促销策略封装成独立的类,方便扩展和维护,提高代码的可读性和灵活性。

4. 模板方法模式(Template Method Pattern)

  • 应用场景: 在数据导出模块中,需要将数据导出为不同的格式(如 CSV、Excel、PDF),但导出的基本流程相同,我使用了模板方法模式。
  • 解决问题: 避免重复编写相同的导出流程代码,固定算法骨架,提高代码的复用性,同时允许子类根据需要实现具体的导出逻辑。

5. 建造者模式(Builder Pattern)

  • 应用场景: 在订单系统中,需要构建复杂的订单对象,订单包含多个属性(如商品列表、用户信息、支付信息等),我使用了建造者模式。
  • 解决问题: 避免构造函数参数过多,分步骤构建复杂对象,简化复杂对象的构建过程,提高代码的可读性和可维护性。

6. 观察者模式(Observer Pattern)

  • 应用场景: 在用户注册模块中,当用户注册成功后,需要发送欢迎短信、发送注册邮件、增加用户积分等操作,我使用了观察者模式。
  • 解决问题: 将注册成功后的操作与注册流程解耦,避免注册流程过于臃肿,实现松耦合的通知机制,提高代码的可扩展性和灵活性。

7. 装饰器模式(Decorator Pattern)

  • 应用场景: 在日志系统中,需要为日志记录添加额外的功能(如加密日志、压缩日志),我使用了装饰器模式。
  • 解决问题: 动态地为对象添加额外的功能,而无需修改其结构,提供比继承更灵活的扩展方式,遵循开闭原则,提高代码的灵活性和可扩展性。

8. 适配器模式(Adapter Pattern)

  • 应用场景: 在系统集成中,需要将第三方支付接口适配到现有的支付系统中,我使用了适配器模式。
  • 解决问题: 解决接口不兼容的问题,实现不兼容接口的协作,使现有系统能够与第三方接口无缝对接,提高系统的兼容性和可扩展性。
    总而言之,通过合理地应用这些设计模式,我解决了项目中遇到的代码重复、耦合度高、扩展性差等问题,提高了代码的可维护性、可扩展性和可复用性。在选择和应用设计模式时,需要根据具体场景权衡利弊,避免过度设计。关键是要理解模式的本质,并灵活运用。

设计模式

创建型、结构型、行为型

创建型设计模式

结构型设计模式

行为型设计模式

💯考试真题

答案:(54) D,(55)A,(56)B,(57)A

答案:C D A B


题外话

此文中讲解的设计模式过于理论,找了几篇偏实践的文章,需要细细研磨才会对设计模式有更深入的理解:

Spring 中经典的 9 种设计模式

23 种设计模式详解(全23种)

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

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

相关文章

【大模型(LLMs)RAG 检索增强生成 面经】

1 RAG 基础面 1.1 为什么大模型需要外挂 (向量) 知识库? 如何将外部知识注入大模型,最直接的方法:利用外部知识对大模型进行微调。 思路: 构建几十万量级的数据,然后利用这些数据 对大模型进行微调,以将 额外知识注入大模型 优点: 简单粗暴 缺点: 这几十万量级的数据…

Centos 7 安装达梦数据库

一、环境准备 1. 确认操作系统的版本和数据库的版本是否一致 cat /etc/redhat-release 2. 关闭防火墙 查看防火墙状态 firewall-cmd --state 停止firewall systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.service 3. 修改文件l…

@Autowired 注解在构造器上的使用规则(字段注入也挺好的)

背景 在看Spring Framework官方文档时,看到这样一段描述: As of Spring Framework 4.3, an Autowired​ annotation on such a constructor is no longer necessary if the target bean defines only one constructor to begin with. However, if seve…

深度学习视觉2D检测算法综述

目录 一、两阶段目标检测算法 1.1 R-CNN(Region-based CNN,2014) 1.2 Fast R-CNN(Fast Region-based CNN,2015) 1.3 Faster R-CNN(Faster Region-based CNN,2016) 1…

复试不难,西电马克思主义学院—考研录取情况

01、马克思主义学院各个方向 02、24马克思主义学院近三年复试分数线对比 PS:马院24年院线相对于23年院线增加15分,反映了大家对于马克思主义理论学习与研究的热情高涨,也彰显了学院在人才培养、学科建设及学术研究等方面的不断进步与成就。 6…

【A2DP】深入解读A2DP中通用访问配置文件(GAP)的互操作性要求

目录 一、模式支持要求 1.1 发现模式 1.2 连接模式 1.3 绑定模式 1.4 模式间依赖关系总结 1.5 注意事项 1.6 协议设计深层逻辑 二、安全机制(Security Aspects) 三、空闲模式操作(Idle Mode Procedures) 3.1 支持要求 …

分享一个免费的CKA认证学习资料

关于CKA考试 CKA(Certified Kubernetes Administrator)是CNCF基金会(Cloud Native Computing Foundation)官方推出的Kubernetes管理员认证计划,用于证明持有人有履行Kubernetes管理的知识,技能等相关的能力…

观成科技:​加密C2框架Platypus流量分析

一、工具介绍 Platypus 是一款支持多会话的交互式反向 Shell 管理器。在实际的渗透测试中,为了解决 Netcat/Socat 等工具在文件传输、多会话管理方面的不足,该工具在多会话管理的基础上增加了在渗透测试中能更好发挥作用的功能(如:交互式 Sh…

Jetson Nano NX 重装系统

本篇记录了自己刚拿到Jetson板子后,刻意去学习给板子重刷系统的过程,学会重装系统是玩嵌入式开发板的基操。 注意:我使用的是 Nvidia 官方 SDK Manager 给 Jetson 刷系统的,需要额外准备一台 linux 电脑(双系统或者虚拟…

Java数据结构第二十三期:Map与Set的高效应用之道(二)

专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、哈希表 1.1. 概念 1.2. 冲突 1.3. 避免冲突 1.4. 解决冲突 1.5. 实现 二、OJ练习 2.1. 只出现一次的数字 2.2. 随机链表的复制 2.3. 宝石与石头 一、哈希表 1.1. 概念 顺序结构以及平衡树中…

linux系统命令——权限

一、有哪些权限 读(r)——对应数字4 写(w)——对应数字2 执行(x)——对应数字1 二、权限及数字的对应 4对应r-- 2对应-w- 1对应--x 5对应r-x 6对应rw- 7对应rwx 三、文件的基本属性 如图&#…

PentestGPT 下载

PentestGPT 下载 PentestGPT 介绍 PentestGPT(Penetration Testing GPT)是一个基于大语言模型(LLM)的智能渗透测试助手。它结合了 ChatGPT(或其他 GPT 模型)与渗透测试工具,帮助安全研究人员自…

JVM 2015/3/15

定义:Java Virtual Machine -java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收 数组下标越界检测 多态 比较:jvm/jre/jdk 常见的JVM&…

sql靶场-时间盲注(第九、十关)保姆级教程

目录 时间盲注(第九、十关) 1.判断 2.确认时间盲注 2.手工尝试时间盲注 数据库名长度 数据库名字符 表数 表名长度 表名字符 字段数 字段名长度 字段名字符 4.脚本时间盲注注入 5.第十关 时间盲注(第九、十关) 1.判…

51c自动驾驶~合集54

我自己的原文哦~ https://blog.51cto.com/whaosoft/13517811 #Chameleon 快慢双系统!清华&博世最新:无需训练即可解决复杂道路拓扑 在自动驾驶技术中,车道拓扑提取是实现无地图导航的核心任务之一。它要求系统不仅能检测出车道和交…

大模型推理:LM Studio在Mac上部署Deepseek-R1模型

LM Studio LM Studio是一款支持离线大模型部署的推理服务框架,提供了易用的大模型部署web框架,支持Linux、Mac、Windows等平台,并提供了OpenAI兼容的SDK接口,主要使用LLama.cpp和MLX推理后端,在Mac上部署时选择MLX推理…

扩散模型:AIGC领域的核心引擎,解锁图像生成新维度

一、扩散模型技术原理 扩散模型是一类生成模型,它运用了物理热力学中的扩散思想, 主要包括前向扩散和反向扩散两个过程。 1.1、生成模型 在深度学习中,生成模型的目标是根据给定的样本(训练数据) 生成新样本。首先给…

Java多线程与高并发专题——原子类和 volatile、synchronized 有什么异同?

原子类和 volatile异同 首先,通过我们对原子类和的了解,原子类和volatile 都能保证多线程环境下的数据可见性。在多线程程序中,每个线程都有自己的工作内存,当多个线程访问共享变量时,可能会出现一个线程修改了共享变…

【数据结构】数据结构,算法 概念

0.本篇问题: 数据、数据元素、数据对象、数据项之间的基本关系?ADT是什么?数据结构的三要素?数据的逻辑结构有哪些?数据的存储结构有哪些?算法的五个特征?O(1) O(logn) O(n^n) O(n) O(n^2…

总结 HTTP 协议的基本格式, 相关知识以及抓包工具fiddler的使用

目录 1 HTTP是什么 2 HTTP协议格式 3 HTTP请求(Request) 3.1 认识URL 3.2 方法 3.3 认识请求"报头"(header) 4 HTTP响应详解 4.1 认识"状态码"(statuscode) 4.2 认识响应"报头"(header) 4.3 认识响应"正⽂"(body) 5 通过f…