C++ QT设计模式总结
Ciallo~(∠・ω< )⌒★,这里是 Eureka,欢迎来看我的设计模式总结,有问题随时可以告诉我~
面向对象的设计模式:
以下总结了面向对象的设计模式, QT 的源码在哪里体现了这些模式,以及如何在 QT 中使用这些模式:
创建型模式
工厂模式:定义一个创建对象的接口,由子类来决定具体的创建类。
抽象工厂模式:定义一个创建一系列相关的对象的接口,而不需要关心具体的创建细节。
单例模式:确保在程序中一个类只有一个实例,并提供一个全局访问点。
建造者模式:将对象的创建和表示进行分离,使得只需要修改建造过程,就能够建造出不同的对象。
结构性模式
适配器模式:将一个类的接口转换另一个接口。
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
组合模式:将系统中的对象表示为树形结构(“部分-整体”的层次结构)。
装饰器模式:动态地给一个对象添加一些功能。
外观模式:为系统的一组接口提供一个统一的接口。
享元模式:共享尽量多的相同对象,来减小内存使用。
代理模式:使用代理来控制其他对象对当前对象的访问。
行为型模式
责任链模式:将请求沿着一个链式结构传递,直到有一个对象能够处理。
命令模式:将请求封装成对象。
解释器模式:定义一种语言的文法,并且建立一个解释器来解释该语言中的句子。
迭代器模式:提供一种可以按顺序访问容器中所有的对象,又不暴露容器的内部表示的方法。
中介者模式:用一个中介对象来控制一系列对象的相互通信。
备忘录模式:捕获对象的内部状态,并可以在稍后使对象恢复到这个状态。
观察者模式:当一个对象的状态改变,所有“观察”它的对象都会得到通知并且更新。
状态模式:将状态封装成对象,实现状态和行为的分离。
策略模式:定义了一系列算法,它们可以相互替换。
模板模式:定义了一种类的框架,并且将实现延迟到子类。
抽象工厂模式:在不改变类的前提下,定义对其进行操作的新操作。
软件设计原则
为了实现设计模式、首先需要遵循软件的设计原则:
| 设计原则 | 描述 | 作用 |
|---|---|---|
| 单一职责原则(SRP) | 即一个类应该只有一个责任或功能 | 提高代码的可读性 |
| 开闭原则(OCP) | 软件应该对扩展开放,对修改封闭。 | 使系统更容易维护或修改 |
| 里氏替换原则(LSP) | 子类应该能够替换其基类,而不改变基类的性质。 | 提高代码的复用性 |
| 依赖倒置原则(DIP) | 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。也就是面向接口编程。 | 提高架构稳定性 |
| 接口隔离原则(ISP) | 应该为每个客户建立单独的接口,而不是为所有类提供一个庞大的接口。 | 降低对接口的依赖 |
| 组合复用原则(CARP) | 优先使用对象组合或聚合关系来达到代码复用的目的,而不是继承。 | 防止继承泛滥 |
| 迪米特法则(LoK) | 一个软件实体应该尽可能少地与其他实体发生相互作用,尽量使用第三方进行转发调用。 | 降低类之间的耦合度 |
总结这几个设计原则,主要目的为:
-
提高可重用性:能够将软件应用于不同的问题领域。
-
降低耦合度:减少每个类之间的相互依赖,使得系统更加灵活和易于维护。
-
提高系统的稳定性和性能:搭建稳定的软件架构,减少潜在的错误和性能瓶颈。
相关文章:
C++ QT设计模式总结
Ciallo~(∠・ω< )⌒★,这里是 Eureka,欢迎来看我的设计模式总结,有问题随时可以告诉我~ 面向对象的设计模式: 以下总结了面向对象的设计模式, QT 的源码在哪里体现了这些模式,以及如何在 …...
洛谷 P3203:弹飞绵羊 ← 分块算法(单点更新、单点查询)
【题目来源】https://www.acwing.com/problem/content/2168/https://www.luogu.com.cn/problem/P3203【题目描述】 某天,Lostmonkey 发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。 游戏一开始,L…...
程序验证之Dafny--证明霍尔逻辑的半自动化利器
一、What is Dafny?【来自官网介绍 Dafny 】 1)介绍 Dafny 是一种支持验证的编程语言,配备了一个静态程序验证器。 通过将复杂的自动推理与熟悉的编程习语和工具相结合,使开发者能够编写可证明正确的代码(相对于 {P}S{Q} 这种…...
Flutter 中的 SafeArea 小部件:全面指南
Flutter 中的 SafeArea 小部件:全面指南 在移动应用开发中,处理设备屏幕的边缘是一个常见的挑战,尤其是考虑到现代设备通常具有不同的屏幕形状,如刘海屏、曲面屏等。为了确保应用内容不会覆盖这些屏幕区域,Flutter 提…...
webpack生成模块关系依赖图示例:查看构建产物的组成部分 依赖关系图
npm i -D webpack-bundle-analyzer core-js babel-loaderwebpack.config.js const BundleAnalyzerPlugin require(webpack-bundle-analyzer).BundleAnalyzerPlugin; module.exports {entry: ./src/index.js,output: {filename: main.js,},// mode: production, // 或者 produ…...
Spacy的安装与使用教程
官网安装指导教程 https://spacy.io/usage 安装指令 需要根据自己系统的cuda版本选择 nvcc -V pip install -U pip setuptools wheel pip install -U spacy[cuda12x] python -m spacy download zh_core_web_sm python -m spacy download en_core_web_sm...
Pathlib,一个不怕迷路的 Python 向导
大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…...
详解绝对路径和相对路径的区别
绝对路径和相对路径是用于描述文件或目录在文件系统中位置的两种不同方式。 绝对路径(Absolute Path)是从文件系统的根目录开始的完整路径,可以唯一地确定一个文件或目录的位置。在不同的操作系统中,根目录的表示方式可能略有不同…...
C++二叉搜索树搜索二叉树二叉排序树
C二叉搜索树 1. 二叉搜索树的概念 二叉搜索树(BST,Binary Search Tree),也称为二叉排序树或二叉查找树。它与一般二叉树的区别在于:每个结点必须满足“左孩子大于自己,右孩子小于自己”的规则。在这种规则的约束下,二…...
Java 自然排序和比较器排序区别?Comparable接口和Comparator比较器区别?
注:如果你对排序不理解,请您耐心看完,你一定会明白的。文章通俗易懂。建议用idea运行一下案例。 1)自然排序和比较器排序的区别? 自然排序是对象本身定义的排序规则,由对象实现 Comparable 接口ÿ…...
【CV】opencv调用DIS/LK等计算光流,前一帧和当前帧写反了有什么影响?
当在计算光流时,将前一帧和当前帧输入反了,会导致一系列问题。 在计算光流时,通常是将前一帧作为模板,根据当前帧计算光流。因为光流是描述相邻帧之间像素移动的一种方法,它通过比较两帧之间的像素强度或特征点的移动…...
C语言学习细节|C语言面向对象编程!函数指针如何正确使用
文章目录 1.函数指针定义2.格式3.应用回调函数动态函数调用函数的间接调用 4.结构体与函数指针结合 1.函数指针定义 函数指针就是一个指向函数的指针变量,与指向数据的指针不同,函数指针保存的是函数的地址,这使得程序可以动态地调用不同的函…...
C语言简要(一)
总得让她开心吧 helloworld #include <stdio.h>int main() {printf("hello world!\n");return 0; } 程序框架 #include <stdio.h> int main {return 0; }输出 printf("hello world!\n"); "里面的内容叫做“字符串”,prin…...
那些年我与c++的叫板(一)--string类自实现
引子:我们学习了c中的string类,那我们能不能像以前数据结构一样自己实现string类呢?以下是cplusplus下的string类,我们参考参考! 废话不多说,直接代码实现:(注意函数之间的复用&…...
二刷算法训练营Day08 | 字符串(1/2)
今日任务: 344.反转字符串 541. 反转字符串II卡码网:54.替换数字 151.翻转字符串里的单词卡码网:55.右旋转字符串 详细布置: 1. 344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 …...
使用高防IP是应对网络安全的重要措施
使用高防IP(High Defense IP)在现代网络环境中显得尤为重要,这主要源于以下几个方面的原因: 一、网络安全形势严峻 随着互联网的快速发展,网络安全问题日益突出。各种网络攻击手段层出不穷,如分布式拒绝服…...
代码随想录-算法训练营day40【动态规划03:整数拆分、不同的二叉搜索树】
代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part03● 343.整数拆分 ● 096.不同的二叉搜索树 详细布置 今天两题都挺有难度,建议大家思考一下没思路,直接看题解,第一次做,硬想很难想出来。343. 整数…...
MySQL数据库中基本数据管理操作
使用SQL语句实现基本数据管理操作——即DML语句 1.添加数据 insert into 表名(字段名称,字段名称,字段名称)values(数据,数据,数据) 在MySQL数据库中,除了数字&#x…...
记录一下Hql遇到的零碎问题
建表相关 -- 地区维度表 drop table dim_province_full; create table dim_province_full( id string comment 编号, name string comment 省份名称, region_id string comment 大区id, area_code string comment 行政区位码, iso_code string comment 国际编码, iso_3166_2 s…...
Flutter 中的 TextField 小部件:全面指南
Flutter 中的 TextField 小部件:全面指南 在 Flutter 中,TextField 是一个允许用户输入文本的小部件。它非常灵活,支持多种文本输入场景,如单行文本、多行文本、密码输入、数值输入等。TextField 还提供了丰富的定制选项…...
Qt开发避坑|MQTT客户端频繁下线?竟是setClientId用错了!
做Qt物联网开发的小伙伴,大概率都遇到过这样的坑:本地调试时,MQTT客户端连接正常、消息收发流畅;可当另一个设备(或另一个调试窗口)启动后,前一个客户端突然被强制下线,日志里没明确…...
企业无线网络进阶:FreeRadius服务器配置与TLS证书实战
1. 为什么企业无线网络需要FreeRadius与TLS证书 想象一下你公司的Wi-Fi像是一个没有门禁的公共广场,任何人都能随意进出。这种情况对于企业网络来说简直是灾难——数据泄露、带宽被占、内网渗透风险接踵而至。而FreeRadiusTLS证书的方案,就相当于给这个广…...
[通俗易懂]从“生产者-消费者”模型秒懂Java泛型PECS原则(别再死记硬背了)
1. 从超市购物理解PECS原则 想象你正在超市采购水果。水果区有各种水果篮:有的专放苹果,有的专放香蕉,还有个"混合水果区"放各种水果。这时候你会发现两个有趣的现象: 从水果区取水果:你可以从任何水果篮里安…...
欧美客户下最后通牒:2026年起没有Sedex,订单再多也出不了货!
各位外贸老板、工厂负责人注意了!2026年,全球供应链的ESG合规风暴已经进入下半场。如果你还在做纺织品、家具、电子、玩具出口,还没搞懂Sedex和SMETA新政,很可能随时被踢出欧美客户的供应商名录!没有这块“敲门砖”&am…...
告别手动标注!R语言ggplot2+ggannotate高效绘制组间差异柱状图保姆级教程
R语言科研绘图革命:ggplot2ggannotate自动化差异标注全攻略 科研图表的美观程度直接影响论文的第一印象,而统计显著性标注更是数据可视化的灵魂所在。传统手动添加p值和星号的方式不仅效率低下,还容易出错——标注位置偏移、字体大小不一、连…...
【软考高级架构】论文范文20——论软件设计方法及其应用
论软件设计方法及其应用 摘要 软件设计是将需求分析结果转换为软件体系结构和内部实现细节的关键活动,设计方法的选择直接影响系统的可维护性、可扩展性和开发效率。结构化设计、面向对象设计、数据驱动设计等经典方法各有侧重,在不同场景下展现出独特的优势。本文以笔者主…...
Onekey:三分钟学会免费获取Steam游戏清单的完整指南
Onekey:三分钟学会免费获取Steam游戏清单的完整指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Steam游戏清单获取从未如此简单!你是否曾经需要获取Steam游戏的Depot…...
ArduPilot硬件抽象层(HAL)详解:如何让你的代码跑在不同的飞控板上(以STM32为例)
ArduPilot硬件抽象层深度解析:从STM32到多平台移植实战指南 引言:为什么HAL是飞控开发的核心枢纽 在无人机飞控开发领域,硬件平台的多样性一直是开发者面临的首要挑战。不同厂商的MCU架构、外设接口和操作系统差异,往往导致代码…...
LyricsX终极指南:如何在macOS上免费获得完美歌词同步体验
LyricsX终极指南:如何在macOS上免费获得完美歌词同步体验 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX 你是否厌倦了在不同音乐播放器间切换时手动搜索歌词?Lyr…...
整合ssm框架,详细讲解
今天针对 SSM(SpringSpringMVCMyBatis)框架整合展开了学习,学习内容如下:我们在进行 JavaEE 开发时,为了实现解耦和提高开发效率,通常会采用 SSM(SpringSpringMVCMyBatis)框架整合的…...
