当前位置: 首页 > news >正文

C++中的23种设计模式

目录

摘要

创建型模式

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

2. 抽象工厂模式(Abstract Factory Pattern)

3. 单例模式(Singleton Pattern)

4. 生成器模式(Builder Pattern)

5. 原型模式(Prototype Pattern)

结构型模式

1. 适配器模式(Adapter Pattern)

2. 桥接模式(Bridge Pattern)

3. 组合模式(Composite Pattern)

4. 装饰器模式(Decorator Pattern)

5. 外观模式(Facade Pattern)

6. 享元模式(Flyweight Pattern)

7. 代理模式(Proxy Pattern)

行为型模式

1. 责任链模式(Chain of Responsibility Pattern)

2. 命令模式(Command Pattern)

3. 解释器模式(Interpreter Pattern)

4. 迭代器模式(Iterator Pattern)

5. 中介者模式(Mediator Pattern)

6. 备忘录模式(Memento Pattern)

7. 观察者模式(Observer Pattern)

8. 状态模式(State Pattern)

9. 策略模式(Strategy Pattern)

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

11. 访问者模式(Visitor Pattern)


摘要

C++中的设计模式对于我们项目开发来说十分重要,通常会根据自己的实际需求进行相关的选择。
下面我将通过一些伪代码来分享C++的23种设计模式是如何实践的。(仅作为参考)

按创建型模式、结构型模式和行为型模式进行分类可以分为下面的类别:

创建型模式

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

- 常常在创建对象时需要灵活的决定使用哪个类。

- C++中的工厂方法模式-CSDN博客

2. 抽象工厂模式(Abstract Factory Pattern)

- 需要创建一系列相关或相互依赖的对象时,不需要指定它们的具体类。

- C++中的抽象工厂模式-CSDN博客

3. 单例模式(Singleton Pattern)

- 系统中某些类只能有一个实例,如日志记录器、线程池等。

- C++中的单例模式-CSDN博客

4. 生成器模式(Builder Pattern)

- 需要创建复杂对象,其构建过程包含多个步骤,并且步骤可变。

- C++中的生成器模式-CSDN博客

5. 原型模式(Prototype Pattern)

- 需要频繁地创建对象,且创建过程复杂或消耗资源较多。

- C++中的原型模式-CSDN博客

结构型模式

1. 适配器模式(Adapter Pattern)

- 需要将一个类的接口转换成客户希望的另一个接口。

- C++中的适配器模式-CSDN博客

2. 桥接模式(Bridge Pattern)

- 需要在抽象和实现之间解耦,使得它们可以独立变化。

- C++中的桥接模式-CSDN博客

3. 组合模式(Composite Pattern)

- 需要表示对象的部分-整体层次结构。

- C++中的组合模式-CSDN博客

4. 装饰器模式(Decorator Pattern)

- 需要在不改变对象接口的情况下给对象动态添加职责。

- C++中的装饰器模式-CSDN博客

5. 外观模式(Facade Pattern)

- 需要为子系统中的一组接口提供一个一致的界面。

- C++中的外观模式-CSDN博客

6. 享元模式(Flyweight Pattern)

- 需要大量细粒度对象,且这些对象消耗较多内存。

- C++中的享元模式-CSDN博客

7. 代理模式(Proxy Pattern)

- 需要在不修改原始对象的情况下控制对它的访问。

- C++中的代理模式-CSDN博客

行为型模式

1. 责任链模式(Chain of Responsibility Pattern)

- 需要将请求的发送者和接收者解耦,使多个对象有机会处理请求。

- C++中的责任链模式-CSDN博客

2. 命令模式(Command Pattern)

- 需要对请求进行封装,使得请求、排队和日志记录变得更容易。

- C++中的命令模式-CSDN博客

3. 解释器模式(Interpreter Pattern)

- 需要为某些特定的领域创建语言并解释语言中的语句。

- C++中的解释器模式-CSDN博客

4. 迭代器模式(Iterator Pattern)

- 需要顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。

- C++中的迭代器模式-CSDN博客

5. 中介者模式(Mediator Pattern)

- 需要减少多个对象之间的耦合。

- C++中的中介者模式-CSDN博客

6. 备忘录模式(Memento Pattern)

- 需要捕获对象的内部状态,以便之后恢复。

- C++中的备忘录模式-CSDN博客

7. 观察者模式(Observer Pattern)

- 对象间存在一对多依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。

- C++中的观察者模式-CSDN博客

8. 状态模式(State Pattern)

- 对象的行为随状态改变而改变。

- C++中的状态模式-CSDN博客

9. 策略模式(Strategy Pattern)

- 需要在运行时动态选择算法。

- C++中的策略模式-CSDN博客

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

- 需要在一个操作中定义算法的骨架,并允许子类在不改变算法结构的情况下重新定义算法的某些步骤。

- C++中的模板方法模式-CSDN博客

11. 访问者模式(Visitor Pattern)

- 需要对一个对象结构中的各元素进行不同操作,而不改变对象结构。

- C++中的访问者模式-CSDN博客

相关文章:

C++中的23种设计模式

目录 摘要 创建型模式 1. 工厂方法模式(Factory Method Pattern) 2. 抽象工厂模式(Abstract Factory Pattern) 3. 单例模式(Singleton Pattern) 4. 生成器模式(Builder Pattern&#xff0…...

vue.js+node.js+mysql在线聊天室源码

vue.jsnode.jsmysql在线聊天室源码 技术栈:vue.jsElement UInode.jssocket.iomysql vue.jsnode.jsmysql在线聊天室源码...

浏览器无痕模式和非无痕模式的区别

无痕模式 1. 历史记录:在无痕模式下,浏览器不会保存浏览记录、下载记录、表单数据和Cookies。当你关闭无痕窗口后,这些信息都会被删除。
 2. Cookies:无痕模式会在会话期间临时存储Cookies,但在关闭无痕窗口…...

WPF框架,修改ComboBox控件背景色 ,为何如此困难?

直接修改Background属性不可行 修改控件背景颜色,很多人第一反应便是修改Background属性,但是修改过后便会发现,控件的颜色没有发生任何变化。 于是在网上搜索答案,便会发现一个异常尴尬的情况,要么就行代码简单但是并…...

Diffusers代码学习: 文本引导深度图像生成

StableDiffusionDepth2ImgPipeline允许传递文本提示和初始图像,以调节新图像的生成。此外,还可以传递depth_map以保留图像结构。如果没有提供depth_map,则管道通过集成的深度估计模型自动预测深度。 # 以下代码为程序运行进行设置 import o…...

网络的下一次迭代:AVS 将为 Web2 带去 Web3 的信任机制

撰文:Sumanth Neppalli,Polygon Ventures 编译:Yangz,Techub News 本文来源香港Web3媒体:Techub News AVS (主动验证服务)将 Web2 的规模与 Web3 的信任机制相融合,开启了网络的下…...

OpenCV 的模板匹配

OpenCV中的模板匹配 模板匹配(Template Matching)是计算机视觉中的一种技术,用于在大图像中找到与小图像(模板)相匹配的部分。OpenCV提供了多种模板匹配的方法,主要包括基于相关性和基于平方差的匹配方法。…...

26.0 Http协议

1. http协议简介 HTTP(Hypertext Transfer Protocol, 超文本传输协议): 是万维网(WWW: World Wide Web)中用于在服务器与客户端(通常是本地浏览器)之间传输超文本的协议.作为一个应用层的协议, HTTP以其简洁, 高效的特点, 在分布式超媒体信息系统中扮演着核心角色. 自1990年提…...

IO流打印流

打印流 IO流打印流是Java中用来将数据打印到输出流的工具。打印流提供了方便的方法来格式化和输出数据,可以用于将数据输出到控制台、文件或网络连接。 分类:打印流一般是指:PrintStream,PrintWriter两个类 特点1:打印流只操作文件目的地,…...

Cohere reranker 一致的排序器

这本notebook展示了如何在检索器中使用 Cohere 的重排端点。这是在 ContextualCompressionRetriever 的想法基础上构建的。 %pip install --upgrade --quiet cohere %pip install --upgrade --quiet faiss# OR (depending on Python version)%pip install --upgrade --quiet…...

MySQL系列-语法说明以及基本操作(二)

1、MySQL数据表的约束 1.1、MySQL主键 “主键(PRIMARY KEY)”的完整称呼是“主键约束”。 MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 …...

【STM32】步进电机及其驱动

设计和实现基于STM32微控制器的步进电机驱动系统是一个涉及硬件设计、固件编程和电机控制算法的复杂任务。以下是一个概要设计,包括一些基本的代码示例。 1. 硬件设计 1.1 微控制器选择 选择STM32系列微控制器,因为它提供了丰富的GPIO端口和足够的处理…...

Excel自定义排序和求和

概览 excel作为办公的常备工具,好记性不如烂笔头,在此梳理记录下,此篇文章主要是记录excel的自定义排序和求和 一. 自定义排序 举个例子 1. 填充自定义排序选项 实现步骤: 选定目标排序值;文件->选项->自定…...

若依RuoYi-Vue分离版—免登录直接访问

若依RuoYi-Vue分离版—免登录直接访问 如何不登录直接访问前端:后端:方法1:在SecurityConfig.java中设置httpSecurity配置匿名访问方法2:在对应的方法或类上面使用Anonymous注解。 如何不登录直接访问 官网有说明:如何不登录直接…...

java基础知识漏洞记录一

下面是我在阅读JavaGuide面试资料时遇到的不熟悉的知识点总结 JDK9中JRE与JDK新关系 从 JDK 9 开始,就不需要区分 JDK 和 JRE 的关系了,取而代之的是模块系统(JDK 被重新组织成 94 个模块) jlink 工具 (随 Java 9 一起发布的新命…...

html的网页制作代码分享

<!-- prj_8_2.html --> <!DOCTYPE html> <html lang "EN"><head><meta charset"utf-8" /><title>页面布局设计</title><style type "text/css">*{padding: 0px;margin:0px;}#header{back…...

【PIXEL】2024年 Pixel 解除 4G限制

首先在谷歌商店下载 Shizuku 和 pixel IMS 两个app 然后打开shizuku &#xff0c;按照它的方法启动 推荐用adb 启动&#xff08; 电脑连手机 &#xff0c;使用Qtscrcpy最简洁&#xff09; 一条指令解决 shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.ap…...

C#、C++、Java、Python 选择哪个好?

选择哪种编程语言取决于你的需求和偏好&#xff0c;以及你打算做什么类型的项目。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我…...

爬虫补环境,ES6 Class在环境模拟中的应用与优势

相比于使用传统的Object实现补环境框架结构&#xff0c;使用 ES6 的 Class 具有以下优势&#xff1a; 代码维护更方便&#xff1a;Class的语法更简洁直观&#xff0c;方便开发者阅读和维护。组织结构更清晰&#xff1a;Class提供了明确的层次结构&#xff0c;有助于代码的模块…...

linuxcentos将本地库JAR/arr批量导入到Nexus3.x

背景 我们现在要搞一个私服maven来管理对应的依赖包&#xff0c;需要上传包。用nexus只能单个文件搞&#xff0c;批量导入不行&#xff0c;而且还要单独配置groupID什么的。不多BB,上教程 建脚本 vi mavenimport.sh内容是这个 #!/bin/bash # copy and run this script to t…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

高抗扰度汽车光耦合器的特性

晶台光电推出的125℃光耦合器系列产品&#xff08;包括KL357NU、KL3H7U和KL817U&#xff09;&#xff0c;专为高温环境下的汽车应用设计&#xff0c;具备以下核心优势和技术特点&#xff1a; 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计&#xff0c;确保在…...