- 博客(82)
- 资源 (1)
- 收藏
- 关注
原创 C++设计模式学习-组合模式
摘要: 组合模式(Composite)通过树形结构将对象容器和单个对象统一处理,解决客户代码过度依赖容器内部结构的问题。该模式将"部分-整体"层次结构转化为一致的抽象接口,使客户代码能一致处理单个对象和组合对象,提高可维护性和扩展性。示例代码展示了组合节点(Composite)和叶子节点(Leaf)的实现,通过统一接口解耦客户代码与复杂容器结构。核心思想是将"一对多"关系转为"一对一",并支持反向追溯和遍历优化。
2026-02-07 11:06:23
349
原创 C++设计模式学习-备忘录模式
备忘录模式是一种在不破坏封装性的前提下保存对象内部状态的设计模式。该模式通过创建备忘录对象存储原发器状态,需要时可恢复至之前状态,避免了直接暴露对象实现细节。其核心在于信息隐藏,既保持对象封装性,又能将状态保存到外部。现代编程语言通常采用对象序列化方案实现该模式,但该模式在当前技术环境下已略显过时。代码示例展示了备忘录模式的典型实现方式,包括备忘录类和原发器类的交互过程。
2026-02-07 10:43:10
250
原创 C++设计模式学习-状态模式
状态模式是一种行为设计模式,允许对象在内部状态改变时改变其行为,使对象看起来像是修改了自身类。该模式通过将每个状态的行为封装到独立的子类中,实现了状态转换与具体操作的解耦。示例展示了网络连接状态的优化重构:从使用条件判断的硬编码方式,转变为多态的状态类继承结构。这种设计符合开闭原则,新增状态时只需添加子类而无需修改现有代码,同时通过状态对象的共享可降低内存开销。状态模式特别适用于对象行为随状态改变而变化的场景,保证了状态转换的原子性和一致性。
2026-02-07 10:22:03
226
原创 C++设计模式学习-中介者模式
中介者模式通过引入中介对象来管理多个对象间的复杂交互关系,解耦对象间的直接引用。该模式将对象间的控制逻辑集中到中介者中,使对象只需与中介者交互,从而降低系统耦合度。相比外观模式处理系统间单向关联,中介者模式专注于系统内对象间的双向关联管理。虽然能简化维护,但随着逻辑复杂化,中介者自身可能变得臃肿,此时可考虑分解处理。这种模式特别适用于对象间关系频繁变化的场景,通过运行时依赖替代编译时依赖,增强系统应对变化的能力。
2026-02-06 11:41:02
407
原创 C++设计模式学习-抽象工厂模式
摘要: 本文探讨了抽象工厂模式在解决多系列对象创建问题中的应用。通过数据库操作案例展示了传统实现方式与工厂模式改进方案的差异:原代码存在具体类依赖问题,简单工厂模式可能导致系列产品混用,而抽象工厂模式通过统一的IDBFactory接口确保创建相互关联的对象族(如Sql或Oracle系列)。该模式有效封装了对象创建过程,降低了客户端与具体类的耦合,特别适合应对系列对象需求变化。但需要注意,该模式难以应对新增产品类型的需求变更。结构图清晰展现了抽象工厂与各产品族的层次关系。
2026-02-03 16:18:37
357
原创 C++设计模式学习-工厂方法模式
摘要:工厂方法模式通过定义创建对象的接口,将具体类的实例化延迟到子类,实现对象创建与使用的解耦。文章以文件分割器为例,展示了如何通过工厂基类和具体工厂类来避免高层模块对具体类的依赖。该模式适用于应对频繁变化的对象类型需求,将紧耦合关系转化为扩展策略,但要求创建方法和参数相同。在对象实例化过程复杂时,工厂模式比直接依赖注入更具优势,能复用实例化逻辑。
2026-02-03 15:29:54
352
原创 C++设计模式学习-装饰模式
装饰器模式(Decorator Pattern)是一种动态扩展对象功能的设计模式,通过组合而非继承的方式,避免子类膨胀问题。在文件流处理案例中,原始版本通过继承导致类数量爆炸(如CryptoFileStream、BufferedNetworkStream等)。优化版本引入装饰器模式,将扩展功能(如加密、缓冲)封装为独立的装饰器类(CryptoStream、BufferedStream),通过组合基础流对象实现功能扩展。这种设计使功能扩展更灵活,运行时动态装配,显著减少类数量,符合开闭原则。
2026-01-31 18:04:26
400
原创 C++设计模式学习-策略模式
策略模式摘要 策略模式通过将算法封装为独立对象,使它们能在运行时相互替换。该模式解决了当算法频繁变化时,直接编码到对象中导致的复杂性问题。以税率计算为例,传统方法使用条件语句判断国家税率,违反开闭原则;而策略模式通过定义TaxStrategy抽象基类和各国具体税率子类(如CNTax、USTax等),利用多态实现算法切换。SalesOrder类持有策略指针,运行时通过工厂创建具体策略,实现算法与使用者的解耦。该模式消除了条件判断语句,支持算法扩展而不影响现有代码,还能通过共享无状态策略对象节省资源。
2026-01-29 12:13:23
46
原创 C++面向对象设计原则浅尝辄止
面向对象设计的核心价值在于抵御软件变化带来的影响。其优势体现在三个层面:宏观上通过隔离变化降低影响;微观上强调类的责任划分,新增类型不影响原有实现;本质上对象是封装代码数据的实体、可用的公共接口以及承担责任的抽象。面向对象方法通过各司其职的设计原则,使软件更具适应性和可维护性。
2026-01-27 14:06:56
40
原创 C++设计模式浅尝辄止
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。这本书核心在于""这三个字。
2026-01-27 13:59:44
618
原创 C++基础之cout标准输出演示
hello.exe 1>1.txt 2>&1 //标准输出重定向到1.txt 标准错误重定向到标准输出。控制台输出ostream。
2026-01-26 16:33:38
39
原创 设计原则之合成复用
摘要: 合成复用原则(CRP)强调优先使用组合而非继承实现代码复用。组合关系(has-a)通过对象持有实现功能复用,保持封装性和灵活性;继承关系(is-a)则导致紧耦合和语义混乱
2026-01-08 22:26:03
746
原创 设计原则之接口隔离
1. 接口隔离原则的核心是接口专用化、最小化:拆分 “大而全” 的臃肿接口为多个 “小而专”的接口,实现类只继承需要的接口,客户端只依赖用到的接口;2. 违反 ISP 的核心危害:实现类被迫实现无关方法(冗余 /语义混乱)、接口变更影响范围大、客户端易误调用无关方法、接口职责混杂(违反单一职责);3. C++ 落地 ISP 的关键:用多个仅含单一职责的纯虚函数类模拟专用接口,实现类通过多继承按需组合接口,客户端依赖最精简的接口。
2026-01-08 22:07:17
698
原创 设计原则之依赖倒置原则
依赖倒置原则的核心是面向抽象编程:高层模块(业务逻辑)和低层模块(具体实现)都依赖抽象接口,细节(低层实现)依赖抽象,而非高层依赖低层的具体类;违反 DIP 的核心危害:a.新增功能必须修改核心业务代码,易破坏原有功能;b.低层修改传导到高层,耦合度极高;c.代码复用性差、测试困难,扩展成本指数级上升;C++ 落地 DIP 的关键:a.用纯虚函数抽象类定义核心接口(抽象层);b.高层模块通过指针 / 引用依赖抽象,并通过 “构造函数 / 参数注入” 传入具体实现;
2026-01-08 21:54:02
779
原创 C++设计模式学习-模板方法模式
一个抽象的类公开的定义了一个方法的模板。它的子类可以根据需要来重写这个方法,但调用将以抽象类中定义的方式进行。这是一种代码复用技术,他提取了类库中的公共行为,将公共行为放到父类中,然后其子类来实现各自不同的行为。可以实现一种反向的控制,通过子类覆盖父类的函数,从而来防止某一步的执行。父类形式化的定义一个算法,然后具体的实现的方法由子类来实现。符合单一职责原则和开闭原则。
2022-12-18 15:29:54
217
原创 C++设计模式学习-外观模式
外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。封装的内容可以是相互之间毫无关联的东西,但是是一个共同的功能下的。
2022-12-18 14:59:38
171
原创 C++设计模式学习-观察者模式
用于建立一种对象与对象之前的依赖关系, 一个对象发生改变的时候将自动通知其他的对象,其他对象将相应做出反应。发生改变的对象称为观察目标, 被通知的对象称为观察者。
2022-12-04 20:49:13
287
原创 C++设计模式学习-代理模式
提供一种代理来控制对其他对象的访问通过一个抽象类提供的一套相同的接口然后通过封装的方式,来实现通过对代理的访问来间接地访问真正的类。
2022-12-04 20:19:05
555
原创 C++设计模式学习-单例模式
单例模式只有一个实例, 并提供一个访问他的全局访问点实现单例的步骤构造函数私有化增加静态私有的当前类的指针变量提供一个静态的对外接口, 可以让用户获得单例对象单例分为懒汉式和饿汉式单例对象释放的问题可以在对象中新建一个静态的 垃圾桶 ,通过 垃圾桶 的析构函数来释放单例对象多此一举!!!!因为当要销毁单例对象的时候,程序即将销毁,而当程序销毁的时候,单例对象自然会被销毁,所以无需手动销毁!!!!代码演示单例模式遇到多线程懒汉式是线程不安全的(可能同时new很多个对象)饿汉式是线程安全的(对
2022-12-04 20:18:14
162
原创 C++设计模式学习-抽象工厂模式
抽象工厂针对的是产品族,而不是产品的等级结构产品族:同一产地或同一厂商,功能不同产品等级:功能相同,产地或者厂商不同代码
2022-12-04 16:47:56
271
原创 C++设计模式学习-简单工厂模式介绍
通过一个工厂来创建要创建的类好处:客户端和具体实现类解耦对于某些对象创建过程比较复杂的情况,我们也可以不去考虑(无需关心创建的过程)不好:简单工厂模式,增加新的功能是通过修改代码来实现的,不符合开闭原则类的职责过重,若这个类发生问题,会影响很多使用这个工厂的模块适用场景:工厂类负责的对象比较少客户端只知道传入工厂类的参数,对于如何创建对象不关心案例代码
2022-12-04 15:54:03
219
原创 C++设计模式学习-面向对象设计原则
核心的问题:如何同时提高一个软件系统的可维护性和可复用性原则的目的:高内聚,低耦合单一职责原则类的职责单一,对外只提供一种功能,而引起类变化的原因应该只有一个开闭原则类的改动是通过增进代码进行的,而不是修改原代码里氏代换原则任何抽象类出现的地方都可以用他的实现类进行替换(多态)依赖倒转原则依赖于抽象,不要依赖与具体的实现,对接口编程传统设计:优化的设计:接口隔离原则一个接口只提供一种对外的功能合成复用原则对于继承和组合,优先使用组合(即作为一个参数或者是一个内部成员)迪米特原则(又叫最少知识原则)
2022-12-04 15:07:39
187
原创 Qt 继承QApplication封装单例应用程序类
该类重写可以防止应用程序重开,也可以实现一些特殊的需求比如Qt 在一个exe打开的情况下再次双击这个exe使得原来的exe窗口全屏。
2022-09-20 10:46:53
582
原创 C++ 实现类的成员函数绑定回调
一般来讲用于绑定回调的函数是地址已确定的类似全局函数或者类的成员静态函数等,如果有特定的需求比如必须要绑定类的普通成员函数,就需要使用特别的方法,在这里推荐c++库所支持的使用一种模板函数指针funtion和bind结合使用的方法。...
2022-07-28 10:01:28
764
原创 QPushButton绑定快捷键的注意事项
在一个日常开发当中,需要为按钮添加一个快捷键操作,指定键盘上的一个按键按下相当于用鼠标点击了这个按钮,这就是快捷键的作用有个现象是当添加快捷键的顺序是这样的话,快捷键无效先进行快捷键的绑定,再进行按钮文本的设置,无效先进行文本的设置,再进行快捷键的绑定,有效然后我再试了一下将设置文本的代码注释掉,再绑定快捷键,运行程序,按下回车,我靠,程序崩溃了以上就是我在一个日常开发中发现的一个小细节,不清楚是不是我版本Qt5.7.1太低的原因,目前没有去试试高版本的Qt是否存在同样的现象,欢迎有心人留言探讨!
2022-07-02 09:29:42
1184
1
原创 QLabel 跑马灯文字显示
整个功能的实现是在前人的基础上进行了优化和修改有一个比较重要的点是:当windows系统设置文本显示比例不是100%的时候,这里设置字体大小号数并不意味着文字的像素大小就是这个号数重点是这3个函数:源程序呈上头文件:cpp文件:#include “scrolllabel.h”............
2022-07-01 15:47:03
1082
原创 goto语句跳转未初始化变量:C2362
源报错代码:编译器会报错:C2362 goto _exit跳过了_exit初始状态解决方法:解决办法就是将jo变量的声明提前到程序开始
2022-06-30 09:27:24
1780
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅