解锁编程智慧:23种设计模式案例分享

为什么要学习设计模式?你可以把设计模式想象成一些做饭的菜谱。当我们需要做一道菜(开发一个功能)时,如果按照自己的想法随意添加调料(编写代码),很可能做出的菜味道不好(功能不稳定或有bug)。但是,如果我们按照一个成功的菜谱(设计模式)来做,就能更容易地做出美味的菜肴(开发出稳定的功能)。

设计模式就是一些在软件开发中经常被使用的“菜谱”,它们可以帮助我们更好地组织代码、提高代码的可读性和可维护性。这些“菜谱”包括了工厂模式、单例模式、装饰器模式等等。

比如,工厂模式就像是一个厨房里的食材加工厂,我们不需要关心食材是怎么加工出来的,只需要告诉工厂我们需要什么食材,它就会给我们加工好。这样,我们就可以更加专注于烹饪的过程,而不用为食材的加工而烦恼啦!

以下是23种设计模式简单案例分享

1. 工厂模式(Factory Pattern)

• 例子:创建一个咖啡店点餐系统,可以有一个咖啡工厂类,根据不同类型的咖啡(如美式、拿铁)来创建对应的咖啡对象。

2. 建造者模式(Builder Pattern)

• 例子:构建一个复杂的计算机软件系统,可以将其拆分为多个部分,每个部分由一个专门的建造者来创建,最终组合成一个完整的软件系统。

3. 工厂方法模式(Factory Method Pattern)

• 例子:设计一个图形用户界面(GUI)工具包,其中不同的按钮、文本框等控件可以由不同的工厂方法创建,以适应不同的操作系统和平台。

4. 原型模式(Prototype Pattern)

• 例子:在软件开发中,可以使用原型模式来快速复制和修改现有的对象,如通过复制一个已经配置好的服务器对象来创建新的服务器对象。

5. 单例模式(Singleton Pattern)

• 例子:Windows任务管理器,在正常情况下只能打开唯一一个任务管理器。

6. 适配器模式(Adapter Pattern)

• 例子:将一个老式的打印机接口适配到新的计算机系统中,使其能够与新系统兼容并正常工作。

7. 桥接模式(Bridge Pattern)

• 例子:实现一个跨平台的图形用户界面框架,其中抽象化层(如按钮、文本框等控件的接口)与实现化层(如Windows、Linux等不同操作系统的具体实现)通过桥接模式进行分离。

8. 合成模式(Composite Pattern)

• 例子:在文件系统中,文件和文件夹可以看作是一种树形结构,其中文件夹可以包含多个文件和子文件夹,这就是一个典型的合成模式应用。

9. 装饰模式(Decorator Pattern)

• 例子:在Java的I/O流中,可以使用装饰模式来动态地给流添加功能,如缓冲流(BufferedReader/BufferedWriter)就是对基本流(Reader/Writer)的一种装饰。

10. 门面模式(Facade Pattern)

• 例子:在一个复杂的软件系统中,可以设计一个门面类来提供对系统内部多个子系统的统一访问接口,简化客户端的使用。

11. 享元模式(Flyweight Pattern)

• 例子:在网页设计中,可以使用享元模式来共享常用的HTML元素和CSS样式,以减少内存的占用和提高页面的加载速度。

12. 代理模式(Proxy Pattern)

• 例子:在远程通信中,客户端可以通过代理对象来间接地与服务器进行通信,代理对象负责处理网络通信、数据缓存等任务。

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

• 例子:在软件开发中,可以定义一个模板方法,其中包含一些算法的骨架和某些步骤的实现,而具体的步骤则由子类来实现。

14. 策略模式(Strategy Pattern)

• 例子:在电子商务网站中,可以使用策略模式来定义不同的折扣策略(如满减、打折、赠品等),并根据用户的行为和订单金额来动态地选择合适的折扣策略。

15. 命令模式(Command Pattern)

• 例子:在一个图形用户界面(GUI)应用程序中,可以使用命令模式来将用户的操作(如点击按钮、输入文本等)封装为命令对象,并将其放入一个命令队列中等待执行。

16. 职责链模式(Chain of Responsibility Pattern)

• 例子:在一个企业中,请假申请可能需要经过多个级别的审批(如部门经理、人力资源部、总经理等),可以使用职责链模式来将这些审批节点串联起来,并根据条件自动选择下一个审批节点。

17. 状态模式(State Pattern)

• 例子:在一个订单处理系统中,订单的状态可能会经历多个阶段(如待支付、已支付、待发货、已发货等),可以使用状态模式来管理这些状态之间的转换和行为。

18. 观察者模式(Observer Pattern)

• 例子:在一个股票交易系统中,当股票价格发生变化时,需要通知所有关注该股票的投资者。可以使用观察者模式来将投资者与股票对象进行关联,并在股票价格变化时自动通知投资者。

19. 中介者模式(Mediator Pattern)

• 例子:在一个聊天室应用程序中,可以使用中介者模式来管理多个用户之间的通信。中介者对象负责接收和转发用户的消息,并处理用户之间的冲突和协作。

20. 访问者模式(Visitor Pattern)

• 例子:在一个复杂的对象结构中,如果需要对该结构中的对象进行不同的操作(如统计信息、打印报告等),可以使用访问者模式来将这些操作分离出来,并通过访问者对象来访问和修改对象结构中的元素。

21. 备忘录模式(Memento Pattern)

• 例子:在一个文本编辑器中,可以使用备忘录模式来保存和恢复编辑器的状态(如撤销和重做操作)。备忘录对象包含了编辑器状态的快照,可以在需要时将其恢复到之前的状态。

22. 解释器模式(Interpreter Pattern)

• 例子:在一个编程语言解释器中,可以使用解释器模式来解析和执行源代码。解释器对象根据源代码的语法和语义来生成执行计划,并依次执行计划中的指令。

23. 行为者模式(Actor Pattern)

• 例子:在并发编程中,可以使用行为者模式来管理并发任务。行为者对象封装了任务的执行逻辑和状态,并通过消息传递来进行通信和协作。

这些例子涵盖了各种设计模式在实际应用中的场景和用途,有助于理解和掌握这些设计模式的核心概念和原理。

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

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

相关文章

UWB实操:用信号分析仪(频谱分析仪)抓取UWB频域的图像

连接好UWB设备和信号分析仪(频谱分析仪),让UWB设备持续发送信号。我来演示如何一步一步获得下面的图像: 设置频率,FREQ,Center Freq 7987.2MHz 设置X轴,宽度,SPAN 2GHz设置Y轴&…

Kali系统(Debian 10.3) 遇到的问题

目录 问题一:非问题 kali 基础官网与安装 问题二: 问题三: Kali系统 MySQL问题Cant connect to local MySQL server through socket /run/mysqld/mysqld.sock (2) 问题四:重新安装MySQL 也就是MariaDB(MariaDB 含 MySQL相关…

2025最新版Visual Studio Code安装使用指南

2025最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML 2025-1-7 1. Visual Studio Code背景 早在二十年前,通用的集成开发环境(Integrated Deveopment Environment, 简称…

opencv 学习(1)

文章目录 opencv导学部分opencv的作用ffmpeg和 opencv的关系opencv的未来 计算机视觉是什么? opencv导学部分 opencv的作用 1 : 目标识别 人脸识别 车辆识别 2 : 自动驾驶技术 – 计算机视觉 进行车道的检测 3 : 医学图像分析 通过分析光片 来分析人到底得了什么病…

C/C++编程安全标准GJB-8114解读——初始化类

软件测试实验室在申请CMA测试认证时,需要根据相应的标准确定检测方法。GJB-8114是一部嵌入式软件安全测试相关的国家标准,本系列文章我们针对GJB-8114《C/C语言编程安全子集》的具体内容进行解读。GJB-8114标准规则中一共有124条强制性规则, …

Excel 做数据分析的好与不好

日常工作中,涉及到数据的计算分析,Excel 一定是使用最多的。但是也有不少小伙伴困惑于 Excel 的深入学习难度大,复杂问题不好做,相同问题重复烦,大数据跑不了等问题。这里我们就来聊一聊 Excel 做数据分的好与不好&…

ollama安装及本地部署开源大模型

Ollama官网:https://ollama.com/,官方网站的介绍就一句话:Get up and running with large language models. (开始使用大语言模型。) Ollama是一个开源的 LLM(大型语言模型)服务工具&#xff0c…

Vue3 + Vite + Electron + Ts 项目快速创建

一、创建 Vue 项目 1. 创建项目 pnpm create vite 2. 安装依赖 cd excel-electron pnpm install 3. 运行项目 pnpm dev 二、添加 Electron 1. 安装 electron pnpm add electron -D 2. 修改 package.json 添加入口 js 和执行命令。 {"main": "dist-ele…

网页数据如何正确copy到postman中

复制后,粘贴到postman就可以,相关的token及参数都会带过去的 postman怎么copy出地址及参数,给git bash使用? 右边有个两个反向箭头,copy就可以,选项中有java等各种程序语言

《Mcal》--MCU模块

一、MCU模块的主要功能 控制系统时钟的产生。控制系统通用模块,该模块会涉及到Adc、Ftm等外设的配置。控制外设时钟。控制MCU运行的模式。初始化定义RAM Section。 比较重要的是时钟的配置。 二、系统时钟的配置 1、芯片时钟树 要想弄明白时钟配置,需…

Netron可视化深度学习的模型框架,大大降低了大模型的学习门槛

深度学习是机器学习的一个子领域,灵感来源于人脑的神经网络。深度学习通过多层神经网络自动提取数据中的高级特征,能够处理复杂和大量的数据,尤其在图像、语音、自然语言处理等任务中表现出色。常见的深度学习模型: 卷积神经网络…

VR+智慧消防一体化决策平台

随着科技的飞速发展,虚拟现实(VR)技术与智慧城市建设的结合越来越紧密。在消防安全领域,VR技术的应用不仅能够提升消防训练的效率和安全性,还能在智慧消防一体化决策平台中发挥重要作用。本文将探讨“VR智慧消防一体化…

c++领域展开第十幕——类和对象(内存管理——c/c++内存分布、c++内存管理方式、new/delete与malloc/free区别)超详细!!!!

文章目录 前言一、c/c内存分布二、c的内存管理方式2.1new/delete操作内置类型2.2new和delete操作自定义类型 三、operator new与operator delete函数3.1operator new与operator delete函数 四、new和delete的实现原理4.1 内置类型4.2 自定义类型 五、malloc/free和new/delete的…

Android Audio基础(53)——PCM逻辑设备Write数据

1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在 ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图。: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间数据不能随便…

gesp(C++四级)(6)洛谷:B3870:[GESP202309 四级] 变长编码

gesp(C四级)(6)洛谷:B3870:[GESP202309 四级] 变长编码 题目描述 小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他总是觉得,生活中很少用到 2 31…

【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1. 二叉排序树的基本概念 2. 二叉排序树节点结构体定义 3. 创建二叉排序树 4. 判断是否为二叉排序树 5. 递归查找关键字为 6 的结点并输出查找路径 6. 删除二叉排序树中的节点 测试说明 通关代码 测试结果 任务描述 本关任务&a…

Ubuntu下的小bug

问题1: terminal 终端CtrlShfitE键与搜狗输入法冲突Linux 参考链接:https://blog.csdn.net/u011895157/article/details/131583702?fromshareblogdetail&sharetypeblogdetail&sharerId131583702&sharereferPC&sharesourceAndroid_WPF…

Qt 下位机串口模拟器

使用 vspd 创建虚拟配对串口,Qt 实现下位机串口模拟器,便于上位机开发及实时调试,适用字符串格式上下位机串口通信,数据包格式需增加自定义解析处理。 通过以下链接下载 vspd 安装包,进行 dll 破解。 链接: https://…

面试高频:一致性hash算法

这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有那些…

数据库1-4讲

各种名词区分 内模式也叫物理模式、存储模式。 概念模式也叫全局模式、逻辑模式。 外模式也叫用户模式。 笛卡尔积:D1、D2、D3集合中任取一个的所有可能情况。 因此上述笛卡尔积的基数22312 关系模型的三个完整性: 实体完整性&#x…