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

C++ 设计模式—简略版

创建型模式(6种)

单例模式

某个类只允许有一个实例化对象。
因此,构造函数、拷贝构造函数都需要是private类型
提供访问这个唯一实例化对象的接口。

简单工厂模式

存在某个抽象类,它有许多派生类。
将创建对象的任务,交给工厂类。
简单工厂根据传递的参数,生成不同的派生类对象并返回。

工厂方法模式

存在某个抽象类,它有许多派生的具体类。
存在某个抽象工厂,它有许多派生的具体工厂类。
由具体工厂创建具体类对象。
主要应用的是C++的多态特性

抽象工厂模式

存在多个抽象类,它有许多派生的具体类。
存在某个抽象工厂,它有许多派生的具体工厂类。

具体工厂创建一系列的派生类,这一系列的派生类,被称为一个产品族。

原型模式

根据已有对象,复制新的对象。
从这方面将,与构造函数有异曲同工之处。
但原型模式是一种设计模式,它可以提供更高层次的抽象接口。
而拷贝构造函数,则只能在知道具体类的时候,才方便使用,比较偏底层。

建造者模式

对于一个复杂的类,它有多个部分(成员变量)组成。
分别创建每个组成部分(成员变量),然后组成一个整体对象。

结构型模式/组合型模式(7种)

适配器模式

在旧的接口不符合新的接口的需求时,如何用旧的接口实现新的接口的需求。
声明一个新的适配器类,适配器通常继承于新的接口。
在适配器类的成员变量中,有一个旧的接口类的对象;
在适配器类的成员函数中,有一个新的接口类的调用方法;
在新的方法中,使用旧的对象调用旧的方法。
至此,完成适配。

桥接模式

假设有一个抽象类,它有多个派生类;
然后有另一个抽象类,它也有多个派生类;
两者的派生类之间存在调用关系。
我们可以通过在两个抽象类之间架起一座桥,也就是使用抽象类调用抽象类
从而避免派生类调用派生类引起的组合爆炸。
所以,桥接模式,可以简单理解为动态多态+组合策略
动态多态的关注点在于纵向拓展;而组合策略的关注点,在于横向扩展。

组合模式

实例:文件系统
文件系统分为文件夹和文件,文件可以有多种类型
文件夹(组合容器)和文件(叶子节点)继承与同一基类(组合接口
所以文件夹和文件可以不作区分,被同意对待;
文件夹与其内部的成员,形成树状结构。

装饰模式

组件接口(Text):定义核心功能(如render())。
具体组件(PlainText):实现基础功能。

装饰器基类(TextDecorator):继承Text,保证装饰器也能被继续装饰。持有Text对象(通过组合而非继承扩展功能)。
具体装饰器(BoldDecorator等):在调用核心方法前后添加新行为。

外观模式

当有多个复杂的子系统时,提供一个统一的接口,对外提供服务。

享元模式

通过共享对象,减少代码中对象的个数,继而减少内存的使用,提高程序性能。
可共享的部分,存储在享元类中;
不可共享的部分,在调用时可以作为参数传递。
存在一个共享池,当需要的对象不存在时,由共享池创建;当存在时,由共享池返回。
共享池类似于单例模式。

代理模式

通过一个代理对象,访问目标对象。
代理可以在调用真实对象前后添加额外逻辑(如权限检查、缓存、延迟加载等)。

代理模式:“增强或控制”某个对象的功能,代理和真实对象是平级的(实现相同接口)。就像经纪人包装明星,但对外表现和明星一致。
     VS
门面模式:“整合并简化”一群对象的调用,门面是子系统的上层抽象。就像服务员隐藏后厨的复杂性,提供一个更友好的接口。

行为型设计模式(11种)

职责链模式

将多个对象连成一条链:
如果当前对象能处理,那就当前对象处理
如果当前对象不能处理,那就转给下一个对象处理。

命令模式

将请求封装成一个独立的对象(命令),允许你参数化客户端(发送者)与服务端(接收者),从而支持请求的排队、记录、撤销或重做等操作。
命令模式把请求变成“可携带、可存储、可撤销”的对象,像快递包裹一样灵活传递和处理!

解释器模式

它定义一种语言的语法规则,并提供一个解释器来解释这种语言中的表达式。

迭代器模式

支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式。

中介者模式

通过引入一个中介对象来封装一组对象之间的交互,从而减少对象间的直接耦合,使系统更易于维护和扩展。

备忘录模式

在不破坏对象封装性的前提下,捕获并外部化对象的内部状态,以便后续可以随时将对象恢复到之前的状态。

观察者模式

当一个对象改变时,所有依赖它的对象都要改变。
因此在被观测者内部需要存储所有的观测者。

状态模式

当内部状态改变时,改变它的行为。

策略模式

定义一系列的算法类,将每一个算法封装起来,并让它们可以相互替换。

模板方法模式

定义一个操作中算法的框架,而将一些步骤延迟到子类中。

访问者模式

将算法与对象结构分离,使得在不修改现有对象结构的前提下,能够为对象结构中的元素添加新的操作。
简单来说,它像是一个“巡回检查组”,你可以派不同的“访问者”到一组对象中执行特定任务,而无需让这些对象本身处理这些任务。

http://www.lqws.cn/news/570331.html

相关文章:

  • MySQL的调控按钮
  • 【linux】权限深入解析
  • C/C++数据结构之动态数组
  • Vulkan 学习(18)---- 使用 ValidationLayer
  • 洛谷日常刷题3
  • 通过交互式可视化探索波动方程-AI云计算数值分析和代码验证
  • Xcode 中的 Compilation Mode 是管什么的
  • 模拟与可视化复杂非线性偏微分方程:从KdV到云端几何问题-AI云计算数值分析和代码验证
  • 现代 JavaScript (ES6+) 入门到实战(一):告别 var!拥抱 let 与 const,彻底搞懂作用域
  • 80%的知识库场景选择FastGPT,20%的复杂场景选择Dify
  • 概率论符号和公式整理
  • Dify私有化知识库搭建并通过ChatFlow智能机器人使用知识库的详细操作步骤
  • C# 合并两个byte数组的几种方法
  • linux运维学习第10周
  • 手机射频功放测试学习(二)——手机线性功放的静态电流和小信号(S-Parameter)测试
  • 计算机组成原理与体系结构-实验二 ALU(Proteus 8.15)
  • 电子计数跳绳原型
  • 数据结构 哈希表、栈的应用与链式队列 6.29 (尾)
  • Hive SQL 快速入门指南
  • GO 语言学习 之 数组和切片
  • Docker镜像制作案例
  • MATLAB中formattedDisplayText函数用法
  • 用户行为序列建模(篇八)-【阿里】DIEN
  • 由dbc文件解析can消息(一)
  • 信创背景下应用软件迁移解析:从政策解读到落地实践方案
  • 使用Xshell学习Linux的一些基本操作
  • JavaScript基础-常见网页特效案例
  • NumPy 统计函数与矩阵运算指南
  • 【大语言模型入门】—— 浅析LLM基座—Transformer原理
  • FPGA实现CameraLink视频解码,基于Xilinx ISERDES2原语,提供4套工程源码和技术支持