设计模式C++实现
Design Patterns: Elements of Reusable Object-Oriented Software
502203305
不积跬步,无以至千里;
不积小流,无以成江海。
展开
-
C++ 00 设计模式七大原则
原创 2021-12-04 11:04:09 · 73 阅读 · 0 评论 -
C++ 16 责任链模式
总览责任链Chain of Responsibility链.说明信息的传送.链表和函数结合。实际是: 链表的遍历。好处各自的责任明确。前后关系明确即可。责任链的链表可以是双向链表。案例书接上回鞋贩子的公司规模变大。流程就需要明确,需要逐级汇报,上级有权驳回。案例#include<iostream>class ShenHeRenYuan {public: virtual bool.原创 2022-05-29 10:18:23 · 107 阅读 · 0 评论 -
C++ 15 接口类型(组合)设计模式总结
总览核心组合。说明适配器:将成员a类,转化为b类.桥接: 自由组合,各自变化.过滤器: 组合成员a类,用于过滤a类一般是某种条件.组合模式: B+树,层次结构.不过是树的函数加多态形态.装饰器模式: 自己组合自己,链表的形式.外观模式: 组合其他类,任意组合都需要对外提供集中简单的功能,不直接对外,getter,setter都是。享元模式: 组合其他类,以key:value的形式缓存.代理模式: 组合,自己组合自己,和装饰器相似,不过这个是增加处理步骤,装饰器..原创 2022-05-26 09:00:38 · 818 阅读 · 0 评论 -
C++ 14 代理模式
说明代理代理,代理律师,代理人.可以全权负责.好处添加中间层,可以添加中间层,对一些事情进行加强。案例参数检测,代理可以用于参数的检测,添加安全之类的。添加中间层。案例书接上回鞋贩子的秘书代理签合同,盖章。案例#include<type_traits>#include<iostream>class TanPan {public: virtual void QianHeTong..原创 2022-05-23 22:10:35 · 68 阅读 · 0 评论 -
C++ 13 享元模式
简介享元模式缓存机制。也需要友好的设计释放。优点减少对象创建,应用广泛。缓存机制的实现之一。案例书接上回鞋贩子允许客户反馈喜欢的,想要买的鞋子,然后专门进货。代码#include <iostream>#include <string>#include <set>class XieFanZi{public: void ChaXun(std::string xie) ..原创 2022-05-21 09:46:20 · 62 阅读 · 0 评论 -
C++ 12 外观模式
说明外观模式简化操作对外。甚至可以理解为对外的傻瓜操作。比如游戏的上下左右。隐藏底层的逻辑。核心接口不变。接口实现变化。甚至可以理解为只有函数声明。使用场景分层结构。对外提供函数,系统对外仅仅提供几个系统调用。案例书接上回鞋贩子开通了一个小程序,允许客户在线选购。就提供了选择和买卖的功能。代码#include<iostream>#include<string>#include&..原创 2022-05-20 23:33:07 · 201 阅读 · 0 评论 -
C++ 11 装饰器模式
说明装饰器模式decorator pattern.动态的添加和删除,抛开设计模式,能够动态添加和删除的数据结构就是链表。链表分叉,形成树,图。好处动态的给对象添加一个功能。形式也是以链表的形似和。扩展一个功能将不需要继承或者是组合。坏处坏处复杂。类爆炸。对比集合存储方式差异。构造者定长数组,装饰器变长链表。要是有层次模式,还可以用组合模式来进行管理。案例书接上回鞋贩子出席漫展,去cosplay。..原创 2022-05-19 09:04:30 · 215 阅读 · 0 评论 -
C++ 10 组合模式
说明组合模式Composite pattern即将若干基础组成一个整体,也就是树,不过节点比较多,就是2-3-4树,多叉树,B+树.突出的就是整体由若干组成。对比建造者建造者着重于创建对象。着重于组合,逻辑结构。两者不冲突。组合模式注重的是逻辑结构,树型结构。建造注重的是结果。补充可以是上下级的组织结构。也可以是平级的组织结构。常用公司的层次结构,上下级关系。语法树。UI中的窗口控件树。案例书接上..原创 2022-05-18 09:04:10 · 69 阅读 · 0 评论 -
C++ 09 过滤器
说明过滤器裁判,每个裁判有自己的标准。即提供一个裁判功能,输入集合,输出合格的,选出不合格的。说明接口,即一个功能,或者能力。比如比如某个人,可以当老师,达者为师,能教一些本领或知识都可以称为老师。教授就是一个能力。案例书接上回鞋贩子的规模扩大,但是人员不够,就开始招聘。收到很多建立就叫了几个组长,经理过来一起看简历。组长们选,经理再选,最后把合适的给鞋贩子看。案例#include <iostrea..原创 2022-05-17 22:23:47 · 301 阅读 · 0 评论 -
C++ 08 桥接模式
说明桥接模式A:B的笛卡尔积。不过有个主次之分。好处将两个独立变化的组合起来。案例书接上回鞋贩子为了发展企业文化,促进同事之间的关系。组织了一场CS真人对战。案例#include<iostream>#include<string>/************************/class Guns {public: virtual void shot() = 0;};class J..原创 2022-05-16 20:59:34 · 75 阅读 · 0 评论 -
C++ 07 适配器模式
说明适配器模式A伪装成B.好处将两个不想关的类关联。不需要改动,可以随意的增删。将变化的隔离出来。案例书接上回鞋贩子的卖鞋在当地有了名气,需要出席一些会议。自己懒散惯了,穿着随意,也没有穿过正装,而参加会议的着装有要求。必须西装革履加皮鞋。案例#include<iostream>#include<string>class HuiYiBiaoZhun {public: virtual std..原创 2022-05-15 10:18:07 · 69 阅读 · 0 评论 -
C++ 06 创建型设计模式总结
回顾创建唯一的单例模式。生物多样性的工厂。生物多样性带生态系统的抽象工厂。组装厂的建造者模式。一对一复制的原型模式。说明单例则保证对象只有一个。工厂则创建一类对象。抽象工厂则创建多类对象。建造者模式则创建一类对象组装后的结果。缝合怪。原型模式则复制粘贴。总结唯一选择单例。复制选择原型模式(拷贝构造).一类选择工厂.工厂太大(if else 实在是太多啦,造成函数体特别大)选择抽象工厂.建造者..原创 2022-05-14 10:18:51 · 108 阅读 · 0 评论 -
C++ 05 原型模式
说明原型模式拷贝构造.有丝分裂。一分为二。好处整个拷贝,加上了状态。案例书接上回(番外篇)鞋贩子开始修仙,捡到一本《一气化三清》的道法。然后练成了,练出一个分身。主体和分身有关联。那就变成主从。练出两个分身,就变成了集群。主题和分身之间的信息交互就成了分布式主从之间的一致性问题。案例#include<string>#include<iostream>class XieFanZi {publi..原创 2022-05-14 10:06:12 · 78 阅读 · 0 评论 -
C++ 04 建造者模式
说明建造者模式由若干零件拼凑成了一辆车。车就是最终得产物,零件则就是基本元素。核心零件组装,即组装厂。好处同样的一堆零件,可以组成若干种产品。案例书接上回鞋贩子规模扩大,想在进店门口摆放一个吉祥物。而且吉祥物需要用乐高完成。那么乐高小零件就是最小基本元素,而最终拼凑的吉祥物就是产物。代码#include<iostream>#include<vector>#include<st..原创 2022-05-13 08:36:07 · 118 阅读 · 0 评论 -
C++ 03 单例模式
说明单例模式唯一对象,一般资源共享,全局可访问。共享就需要注意线程之间数据竞争。核心中央集权.一般用于全局唯一管理。好处额,有这个需求,就有这个实现。案例书接上回鞋贩子开了店,规模越来越大,就有人想要入股投资。入股投资就会导致以后公司可能不是自己一个人说了算。所以,就拒绝了。现在需要招聘更多店员,入职审批都需要老板同意。代码#include<iostream>#include<vecto..原创 2022-05-12 08:52:16 · 76 阅读 · 0 评论 -
C++ 02 抽象工厂
说明抽象工厂工厂太大,if else太多,不好管理,就要拆分.按组进行管理.核心if else不可能无限增加。多了就得拆分,不然增加管理难度。好处降低管理难度和复杂度。案例接上回鞋贩子摆摊发财了。规模变大。租了两层楼来卖鞋。一层楼卖拖鞋,一层楼卖运动鞋。鞋子则按照很多进行分类。拖鞋有:沙滩拖鞋,人字拖等。运动鞋有:跑步鞋,篮球鞋,足球鞋等。代码#include<iostream>#incl..原创 2022-05-11 23:32:20 · 203 阅读 · 0 评论 -
C++ 01 工厂模式
说明工厂模式给别人用简单。给自己用方便。核心降低使用难度。好处重复写非常复杂的创建过程。容易出错且重复性高。写程序就是要减少重复性的劳动。一次就好。案例买鞋外地人鞋贩子那儿买鞋。本地方言和书面语的对应。代码#include<iostream>#include<string>class XieZi {public: virtual void ShaXie() = 0;};..原创 2022-05-11 23:05:34 · 136 阅读 · 0 评论