设计模式
文章平均质量分 88
First Snowflakes
捡贝壳
展开
-
c++11实现一个线程池子
Task类:对应要执行的任务Task::run, 任务入参Task::mParam.class Task {public: Task(int val=0): mParam(val) { } virtual ~Task() { } void setParam(int val) { mParam = val; } void run() { thread::id threadId = std::this_thread::get_id(); cout <&l..原创 2021-04-16 23:33:36 · 545 阅读 · 1 评论 -
模块条件编译(CMake C++多态 工厂模式)
场景描述:每年的夏天都会有台风,为了给减少台风对人类造成的损失,需要对产生自海洋的台风路径进行预测。当前,中国,欧盟,日本,美国等各国都会有自己的台风预测部门,他们使用的算法也不相同。现在,需要写一个程序,该程序接受一个入参,以指示使用哪个国家的算法来预测台风。使用c++实现,于是自然地会使用多态,建立一个基类(接口类), 各个国家的算法类都继承自该基类。另外,为了实现跨平台,我们采用CMake来组织编译。借助CMake可以方便地实现选择性编译,例如,你本地有15个国家的算法实现,但是客户只需要3原创 2020-12-19 23:17:08 · 492 阅读 · 1 评论 -
责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。常用场景1)有一个请求数据,有一组handler, 其中的某一个handler可以用来处理该请求,可以将所有的handler连成一个chain,数据发送给第一个handler,其判断自己能否处理该数据,如果能则处理,并结束,否则, 调用下一个handler的处理函数.原创 2020-12-16 22:05:50 · 214 阅读 · 0 评论 -
C++ Abstract class vs Interface
Abstract classAn abstract class is, conceptually, a class that cannot be instantiated and is usually implemented as a class that has one or more pure virtual (abstract) functions.A pure virtual function is one which must be overridden by any concrete...原创 2020-11-20 08:54:08 · 467 阅读 · 1 评论 -
桥模式(Bridge)以及工程应用
概念建立两套相互独立的类继承体系,然后,通过让一个类引用另一个类来连结起来, 避免类组合的爆炸。例如,当前有各种图形:圆形,三角形,长方形,它们有公共的基类class ShapeBase, 公共的虚函数接口为drawShape,用于绘制出不同的形状。现在加一个需求,需要能绘制出不同颜色的形状,颜色要求有红色,绿色,蓝色,而且将来可能增加颜色。如果用继承的方式来实现的话,一种方式是,有一个公共的ShapeBase基类,然后派生出各种图形,然后各个图形又派生出自己的各种颜色的图形,如下图所...原创 2020-11-19 23:14:09 · 568 阅读 · 0 评论 -
回调函数; 动态库dll提供回调函数接口
Dll可以提供回调函数的接口,供用户注册一个函数func, 然后,dll可以以一定的频率调用func,例如,将最新数据通过该函数给传递给用户;《Api design for- c plus》2.5.5:In C/C++, a callback is a pointer to a function within module A that is passed to module B, so that B can invoke the function in A at an appropriate ti原创 2020-09-27 22:55:24 · 610 阅读 · 0 评论 -
设计方法:为模块设置对外交互层
场景:系统有多个模块构成,各个模块是独立的进程,你写了一个模块,该模块需要与系统进行交互,常见的设计方法是,为该模块增加一个接口类,其负责联系其模块内部与整个系统的接口。...原创 2020-09-19 18:47:56 · 236 阅读 · 0 评论 -
设计模式:简单工厂模式、 工厂模式、抽象工厂模式
抽象工厂 与 工厂模式:going。。。原创 2020-08-27 23:08:35 · 152 阅读 · 0 评论 -
Pimpl
1. 《Effective Mocern C++》的作者在“item 22: Pimpl Idiom”的理解: 已经整理: https://blog.csdn.net/qq_35865125/article/details/1038375182. 《API Design for C++》的作者Martin Reddy在 “3.1 PIMPL IDIOM”的理解...原创 2020-04-15 08:59:30 · 541 阅读 · 0 评论 -
suzhou auto drive interview in 2018
https://www.cnblogs.com/wpcockroach/p/3611747.html原创 2019-11-03 16:01:54 · 119 阅读 · 0 评论 -
订阅者发布者模式进阶
life is in dream..........我的 https://blog.csdn.net/qq_35865125/article/details/88322729 这篇文章中使用c++自己实现了这种模式,但是这种模式有一个很大的缺点,发布者类和订阅者类是...原创 2019-04-16 22:22:16 · 292 阅读 · 0 评论 -
基于qt creator,camke使用boost库中的signals2实现订阅者发布者模式
心 火!几个要点先罗列如下:1) 可以直接使用boost的源文件,不用编译。2)在CMakeLists.txt文件中指出boost源文件的所在位置,然后就可以直接在自己的代码中include boost的源文件。 另外有一种直接使用cma...原创 2019-04-16 22:21:07 · 424 阅读 · 0 评论 -
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)
Ref:https://www.cnblogs.com/yangfengwu/p/7764667.html ----good!http://www.runoob.com/w3cnote/mqtt-intro.html原创 2019-03-16 22:15:13 · 2254 阅读 · 0 评论 -
C++ 单例模式
单例模式就是一个类只能被实例化一次 ,即,只能有一个对象的类。单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。一般情况下,我们建立的一些类是属于工具性质的,(例如,模型的数学算法类,假设有1000个车辆对象,每个车辆对象中存储着赛车的基本参数,这些对象只用一个算法就可以),基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一个对象,即增加了开...原创 2019-03-15 22:31:41 · 311 阅读 · 0 评论 -
自己用C++写一个发布者订阅者模式
突然想整理一下自己用过的这个模式,半小时写下了这些代码。首先定义两个基类,class notifier(发布者) 和 class receiver(订阅者)。在发布者类中有成员 std::vector<receiver*> observerList,该vector用于存储订阅者对象,当发布者需要发布消息时,消息会被发送给vector中所有的订阅者对象。在订阅者类中定义...原创 2019-03-07 22:40:17 · 4286 阅读 · 2 评论 -
设计模式之--Visitor
该模式适用于数据结构相对稳定的系统。 它把数据结构和作用于结构上的操作之间的耦合解开,使得操作集合可以相对自由地演化。很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式是比较合适的,因为该模式使得算法的增加变得更加容易。 新增一种对数据的操作就是新增一种访问者。Ref:《大话设计模式》-- 程杰https://www.jianshu.com/p/feec47a25b67设计模式:visitor - 永远是学生 - 博客园..原创 2018-09-21 09:32:34 · 144 阅读 · 0 评论 -
设计模式--刻意学习-序
Good Articles:《你为什么总是学不会设计模式》https://www.cnblogs.com/wangfupeng1988/p/3687346.html《学了那么多年设计模式依然不会用,那可真蠢》 https://blog.csdn.net/a519781181/article/details/79064102Book:---大部分好书用的是java语言《Hea...原创 2018-08-21 14:17:15 · 143 阅读 · 0 评论