自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 25_中介者模式

摘要:中介者模式是一种行为型设计模式,通过引入中介对象来协调多个对象间的交互,降低耦合度。该模式适用于对象间交互复杂、需要集中管理通信的场景,包含中介者、具体中介者、同事和具体同事四个角色。UML图展示了星形通信结构,相比直接通信的网状结构更简洁。代码示例演示了C++实现方式,同事对象通过中介者转发消息。优点包括降低耦合、提高可维护性,缺点可能使中介者过于复杂。中介者模式有效解决了对象间直接依赖问题,但需权衡其带来的复杂度。

2026-04-17 09:00:00 556

原创 26_解释器模式

解释器模式是一种行为型设计模式,用于定义语言的文法并解释执行语句。它包含抽象表达式、终结符表达式、非终结符表达式和上下文等角色,通过构建语法树递归解释语言表达式。该模式适用于处理固定文法的简单语言,优点是灵活扩展语言处理能力且符合开闭原则,缺点是复杂文法可能导致系统性能和维护性问题。示例展示了通过上下文和表达式类实现简单解释器的过程。

2026-04-17 09:00:00 462

原创 23_状态模式

状态模式是一种行为型设计模式,允许对象在内部状态改变时改变其行为。它将状态逻辑封装到不同的状态类中,使对象行为随状态变化。适用于对象行为依赖于可变状态、状态数量较多或需要避免大量条件判断的场景。实现包含上下文(持有状态)、状态接口和具体状态类三个角色。优点包括提高代码清晰度、可维护性和灵活性,符合开闭原则;缺点可能增加系统复杂性和内存使用。通过状态类封装逻辑和上下文委托请求,实现了状态转换和行为变化。

2026-04-16 09:00:00 276

原创 24_访问者模式

访问者模式是一种行为型设计模式,它分离对象结构与操作,允许在不修改类的情况下添加新操作。该模式包含访问者、具体访问者、元素、具体元素和对象结构五个角色,通过双重分派机制实现。适用场景包括需要对对象结构执行不同操作、添加新操作而不修改结构、或元素类型少但操作多的情况。优点包括符合开闭原则、提高灵活性,缺点则是增加系统复杂性、可能破坏封装性。示例代码展示了访问者模式的典型实现方式。

2026-04-16 09:00:00 343

原创 21_命令模式

命令模式是一种行为型设计模式,通过将请求封装为对象来实现发送者与接收者的解耦。该模式适用于需要支持命令撤销、参数化请求、请求排队等场景,主要由命令接口、具体命令、接收者、调用者和客户端等角色组成。其优点是提高系统灵活性、支持撤销/重做,但会增加系统复杂性。UML图和代码示例展示了命令模式的具体实现方式,包括命令的封装、执行和撤销机制。

2026-04-15 09:00:00 271

原创 22_备忘录模式

备忘录模式是一种行为型设计模式,用于在不破坏封装性的前提下捕获和恢复对象内部状态。该模式包含三个核心角色:发起人(创建/恢复状态)、备忘录(存储状态)和管理者(保存/管理备忘录)。适用于需要实现撤销操作或状态保存的场景。其优点包括保持封装性、支持撤销功能,但可能增加内存使用和系统复杂度。通过窄接口原则确保状态安全性,同时将状态管理逻辑与业务逻辑分离。示例展示了如何使用C++实现状态保存与恢复的完整流程。

2026-04-15 09:00:00 254

原创 19_迭代器模式

迭代器模式是一种行为型设计模式,它通过提供统一的遍历接口来访问聚合对象中的元素,同时隐藏其内部结构。该模式包含迭代器、具体迭代器、聚合和具体聚合四个核心角色,适用于需要统一遍历不同聚合对象或修改遍历过程的场景。示例代码展示了C++实现方式,展示了如何创建和使用迭代器。其优点包括隐藏内部结构、统一接口和遵循单一职责原则,但会增加系统复杂性和可能的内存泄漏风险。

2026-04-14 09:00:00 243

原创 20_责任链模式

责任链模式是一种行为型设计模式,允许多个对象处理请求,形成处理链。它适用于需要动态指定处理对象或避免发送者与接收者紧耦合的场景。实现包含处理者接口、具体处理者和客户端三部分,通过链式调用传递请求直至被处理。优点包括灵活性高、耦合度低、符合开闭原则;缺点是可能产生未处理请求、性能下降和系统复杂度增加。代码示例展示了如何创建处理链并传递不同请求。该模式特别适合需要多级处理或动态调整处理流程的系统设计。

2026-04-14 09:00:00 276

原创 17_模板方法模式

模板方法模式是一种行为设计模式,它通过定义算法骨架(模板方法)并将特定步骤延迟到子类实现,实现代码复用和扩展控制。该模式适用于需要固定算法流程但允许部分步骤灵活变化的场景,由抽象类(定义模板方法和基本操作)和具体类(实现特定步骤)组成。其优点包括减少重复代码、符合开闭原则,但也可能导致类数量增加和算法修改困难。UML图和代码示例展示了抽象类定义流程、具体类实现细节的典型结构。

2026-04-13 09:00:00 369

原创 18_观察者模式

观察者模式是一种行为型设计模式,实现对象间一对多的依赖关系。当主题对象状态变化时,自动通知所有观察者对象。该模式包含主题(Subject)、具体主题(ConcreteSubject)、观察者(Observer)和具体观察者(ConcreteObserver)四个角色。其优点包括松耦合、广播通信、开闭原则支持和实时通信,但也可能导致大量观察者对象和循环依赖问题。代码示例展示了C++实现方式,通过attach/detach管理观察者,setMessage触发通知流程。UML图和序列图清晰展示了模式结构和消息流程

2026-04-13 09:00:00 453

原创 15_享元模式

享元模式是一种通过共享对象来优化内存和性能的结构型设计模式。它适用于需要创建大量相似对象且大部分状态可共享的场景,通过区分内部状态(可共享)和外部状态(由客户端传入)来减少对象创建。实现包含享元接口、具体享元、享元工厂和客户端四个角色。优点是降低内存使用、提高性能,但会增加系统复杂度。代码示例展示了如何通过享元工厂管理共享对象池,实现对象的复用。

2026-04-12 09:00:00 258

原创 16_策略模式

策略模式是一种行为型设计模式,它将算法封装为独立类,使它们可以互相替换。该模式包含策略接口、具体策略实现类和上下文类三个主要角色,通过组合方式实现算法与使用者的解耦。策略模式适用于需要在运行时切换算法、避免大量条件判断的场景,提高了代码的灵活性和可维护性,但会增加系统复杂度和对象数量。示例代码展示了如何通过策略模式实现不同的排序算法,并在运行时动态切换策略。

2026-04-12 09:00:00 279

原创 13_桥接模式

摘要:桥接模式是一种结构型设计模式,通过将抽象部分与实现部分分离,使二者能够独立变化。它适用于需要在多个维度扩展类或避免抽象与实现固定绑定的场景。该模式包含抽象、扩展抽象、实现和具体实现四个角色,通过聚合关系桥接抽象与实现维度。优点包括提高扩展性和维护性,符合开闭原则;缺点可能增加系统复杂性和设计难度。代码示例展示了如何通过接口和继承实现桥接模式的基本结构。

2026-04-11 09:00:00 286

原创 14_组合模式

组合模式是一种结构型设计模式,用于表示"部分-整体"的树形层次结构。它通过定义统一的组件接口,让客户端可以一致地处理单个对象(叶节点)和对象组合(复合节点)。该模式包含组件、叶子和复合三个核心角色,复合节点可以递归包含其他组件形成树形结构。组合模式简化了客户端代码,支持递归处理,符合开闭原则,但也可能导致设计过于一般化。典型应用场景包括需要处理对象层次结构的系统,如文件系统、UI组件等。实现时需要注意叶节点和复合节点的不同行为。

2026-04-11 09:00:00 263

原创 11_代理模式

代理模式摘要 代理模式是一种结构型设计模式,通过创建代理对象来控制对真实对象的访问。它包含三个核心角色:抽象主题接口、真实主题实现类和代理类。代理模式适用于需要添加访问控制、延迟加载或远程访问等场景。 实现方式上,代理类持有真实对象的引用,并在转发请求前后插入额外逻辑(如权限检查、日志记录)。该模式遵循开闭原则,能在不修改真实对象的情况下扩展功能。 主要优点包括解耦客户端与真实对象、实现延迟加载和访问控制;缺点是增加了系统复杂度,可能影响性能。代码示例展示了代理如何包装真实对象,在请求处理前后添加额外操作。

2026-04-10 09:00:00 510

原创 12_外观模式

外观模式是一种结构型设计模式,它为复杂子系统提供统一的高层接口,简化客户端调用。该模式包含外观类(提供统一接口)和子系统类(实现具体功能),通过外观类将客户端请求委派给子系统处理。主要优点包括降低系统耦合度、简化客户端调用、隐藏实现细节;缺点可能造成外观类过于复杂,且子系统变更需修改外观类。适用于需要为复杂系统提供简单接口、减少系统耦合度的场景。

2026-04-10 09:00:00 608

原创 09_适配器模式

适配器模式是一种结构型设计模式,用于解决接口不兼容问题。它通过转换接口使原本不兼容的类能够协同工作,主要有类适配器(继承实现)和对象适配器(组合实现)两种方式。该模式适用于复用现有类但接口不匹配的场景,优点包括提高系统扩展性和代码复用性,缺点可能增加系统复杂度和耦合度。代码示例展示了两种适配器实现方式,通过将Adaptee的specificRequest()适配为Target的request()接口。

2026-04-09 09:00:00 396

原创 10_装饰器模式

装饰器模式是一种动态扩展对象功能的结构型设计模式,允许在不修改原有对象的情况下添加额外职责。通过组合而非继承实现功能扩展,包含组件、具体组件、装饰器和具体装饰器等角色。UML结构展示了装饰器与组件的聚合关系及多级嵌套能力。代码示例演示了如何通过装饰器层层包装组件对象。该模式的优点包括动态扩展、避免继承爆炸、符合开放封闭原则,但可能增加系统复杂性并使代码难以理解。适用于需要灵活添加或移除对象功能的场景。

2026-04-09 09:00:00 453

原创 07_建造者模式

建造者模式是一种创建型设计模式,用于分离复杂对象的构建过程和表示。它适用于创建具有复杂内部结构或多属性的对象,通过抽象建造者定义接口,具体建造者实现构建逻辑,指挥者控制构建顺序。UML图展示了产品、建造者和指挥者之间的关系。代码示例演示了如何使用C++实现建造者模式,创建不同表示的产品。优点是构建与表示分离、控制精细、符合单一职责原则;缺点是增加系统复杂度,产品结构变化时需修改所有建造者类。

2026-04-08 09:00:00 292

原创 08_原型模式

摘要:原型模式是一种通过复制现有对象来创建新对象的设计模式,避免了复杂的实例化过程。它适用于创建成本高或与现有对象相似的新对象场景。实现包含原型接口、具体原型类和客户端三个角色,通过clone()方法复制对象。该模式优点是快速创建、动态增减对象,缺点是实现复杂且可能引发循环引用问题。代码示例展示了C++中如何实现原型模式。

2026-04-08 09:00:00 257

原创 05_抽象工厂模式

抽象工厂模式是一种创建型设计模式,用于创建相关对象的家族而不指定具体类。它包含抽象产品、具体产品、抽象工厂和具体工厂等角色,通过工厂接口创建相互兼容的产品系列。该模式优点在于实现产品族创建与使用的分离,保证产品兼容性,但添加新产品类型时需要修改所有工厂实现,增加了系统复杂性。代码示例展示了如何通过抽象工厂创建不同系列的产品对象,如ProductA1/B1和ProductA2/B2,这些产品由各自的工厂类(ConcreteFactory1/2)创建,确保同一工厂创建的产品能够协同工作。

2026-04-07 09:00:00 395

原创 06_单例模式

单例模式是一种确保类仅有一个实例的设计模式,提供全局访问点。适用于需要唯一实例协调组件、控制资源访问或避免高成本重复创建的场景。常见实现方式包括饿汉式、懒汉式、双重检查锁定、静态内部类等。代码示例展示了使用C++11 std::call_once的线程安全实现。该模式优点是确保唯一实例和全局访问,但缺点是增加耦合度、测试困难及可能的内存泄漏问题。

2026-04-07 09:00:00 405

原创 04_工厂方法模式

工厂方法模式是一种创建型设计模式,通过定义创建对象的接口让子类决定实例化哪个类。该模式包含产品接口、具体产品、工厂接口和具体工厂四个角色,实现了对象创建和使用的分离,符合开放封闭原则。主要优点包括解耦对象创建和使用、便于扩展新产品类型,但也存在增加代码复杂性和客户端需知晓具体工厂类型的缺点。适用于需要灵活创建对象或希望将创建过程委托给子类的场景,如示例代码展示了通过不同工厂创建不同类型产品的实现方式。

2026-04-06 12:06:16 220

原创 03_简单工厂模式

简单工厂模式是一种创建型设计模式,通过工厂类集中管理对象创建逻辑,使客户端无需了解具体实现细节。该模式包含产品接口、具体产品和工厂类三个角色,适用于对象类型较少且稳定的场景。优点是实现创建与使用分离,缺点是工厂类职责过重,添加新产品需修改工厂代码,违反开放封闭原则。示例代码展示了如何通过工厂类创建不同产品实例。

2026-04-06 12:05:14 218

原创 02_设计模式最佳实践

本文系统介绍了23种常用设计模式的选择原则、应用场景和实现建议,包括创建型、结构型和行为型三大类。文章强调应根据具体问题选择合适的设计模式,考虑系统可扩展性、性能和团队熟悉度,避免过度设计和机械应用。通过配置管理、排序算法和事件系统等实际案例,展示了单例模式、策略模式和观察者模式的具体应用。同时指出了过度使用设计模式、机械应用、忽略变体、不考虑性能和团队熟悉度等常见误区。设计模式是提高代码质量和可维护性的重要工具,但需合理运用才能发挥其真正价值。

2026-04-05 16:28:02 578

原创 01_设计模式概述

设计模式是软件开发中针对常见问题的可重用解决方案,分为创建型、结构型和行为型三大类。创建型模式处理对象创建(如工厂、单例模式),结构型模式处理对象组合(如适配器、装饰器模式),行为型模式处理对象交互(如观察者、策略模式)。设计模式能提高代码重用性、可维护性和可扩展性,促进团队协作。应用时应避免过度设计,理解模式意图,灵活选择合适模式。掌握设计模式有助于开发更优雅高效的软件系统。

2026-04-05 16:24:11 391

原创 CMake+QT使用教程

05 QT+CMake使用教程

2023-03-26 17:50:26 8962

转载 01 QxOrm使用教程

QxOrm使用教程(ORM for C++ 对象关系映射)

2023-03-21 23:06:36 3448

原创 04 调用QString::fromStdString导致程序崩溃

QString::fromStdString导致程序崩溃

2023-03-21 18:02:48 1289

原创 03 QT编写HTTP客户端

QT编写HTTP客户端

2023-02-05 08:00:00 644

原创 03 VS项目编译报错warning C4005: “AF_IPX”: 宏重定义warning C4005: “AF_IPX”: 宏重定义

VS项目编译报错warning C4005: “AF_IPX”: 宏重定义warning C4005: “AF_IPX”: 宏重定义

2023-02-05 08:00:00 2072

原创 02 QT与C++字符串编码转换

QT与C++字符串编码转换

2023-02-04 08:00:00 731

原创 02 Qt连接信号槽报错QObject::connect: Cannot queue arguments of type ‘******‘

Qt连接信号槽报错QObject::connect: Cannot queue arguments of type ‘******‘

2023-02-04 08:00:00 894

原创 01 QT项目常用配置

QT项目常用配置。

2023-02-03 08:00:00 443

原创 01 LNK2038:检测到“RuntimeLibrary”的不匹配项

qtmian.lib(qtmain_win.obj):error LNK2038:检测到“RuntimeLibrary”的不匹配项:值“MD_DynamicRelease”不匹配值“MT_StaticRelease”

2023-02-01 09:00:00 2786

原创 08 etcd环境安装

etcd环境安装etcd是一个分布式的键值存储系统,其优秀的读写性能、一致性和可用性的机制,非常适合用来做配置中心角色。1.下载[下载地址]下载预构建的二进制文件,根据不同平台选择:etcd-v3.5.2-darwin-amd64.zipetcd-v3.5.2-linux-amd64.tar.gzetcd-v3.5.2-linux-arm64.tar.gzetcd-v3.5.2-linux-ppc64le.tar.gzetcd-v3.5.2-linux-s390x.tar.gzetcd-v

2022-04-13 13:27:13 401

原创 07 Kibana环境安装

Kibana环境安装Kibana是一个开源分析和可视化平台,旨在与 Elasticsearch 一起使用。您可以使用 Kibana 搜索、查看存储在 Elasticsearch 索引中的数据并与之交互。您可以轻松地执行高级数据分析并在各种图表、表格和地图中可视化您的数据。注意:建议将 Kibana 与 Elasticsearch 安装在同一台服务器上,但这不是必需的。如果您将产品安装在不同的服务器上,则需要 kibana.yml在启动 Kibana 之前在 Kibana 配置文件中更改 Elastics

2022-04-12 10:41:59 2375

原创 06 ES(Elasticsearch)环境安装

ES(Elasticsearch)Elasticsearch是一个实时的分布式存储、搜索和分析引擎。它可以用于多种用途,但它擅长的一个方面是索引半结构化数据流,例如日志或解码的网络数据包。官方地址下载安装Elasticsearch下载地址deb for Debian/Ubuntucurl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.1.2-amd64.debsudo dpkg -i e

2022-04-12 10:40:03 1232

原创 04 JDK环境安装

下载JDK下载地址配置JAVA_HOMEC:\Program Files (x86)\Java\jdk1.8.0_91 CLASSPATH.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; Path%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

2022-04-12 10:07:28 1279

原创 19 tail和sarama模块使用

tail模块下载go get github.com/hpcloud/tail使用package mainimport ( "fmt" "os" "time" "github.com/hpcloud/tail")/*type Config struct { // File-specifc Location *SeekInfo // 在seek的位置开始读 ReOpen bool // 重新打开重新创建的文件 (tail -F) MustExis

2022-03-30 23:00:44 433

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除