设计模式 c++
陈小淘
这个作者很懒,什么都没留下…
展开
-
行为型--命令模式、解释器模式、中介模式
命令模式、解释器模式、中介模式。这 3 个模式使用频率低、理解难度大命令模式定义:命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象)。使用场景:比如,异步、延迟、排队执行命令、撤销重做命令、存储命令、给命令记录日志ps:和策略模式,工厂模式很像。要从使用场景来看区别。该由两部分组成:第一部分是应用场景,即这个模式可以解决哪类问题;第二部分是解决方案。策略,工厂,命令差异。工厂注重创建,创建的未必是策...原创 2020-10-13 17:13:57 · 176 阅读 · 0 评论 -
行为型--备忘录模式
应用场景也比较明确和有限,主要是用来防丢失、撤销、恢复等定义:在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。tnputText 捕获snapshothold状态,snapshothold用栈。如何优化内存和时间消耗:只备份必要的恢复信息,结合最新的数据来恢复全量备份和增量备份相结合,低频全量备份,高频增量备份,两者结合来做恢复...原创 2020-10-13 17:11:52 · 103 阅读 · 0 评论 -
行为型--反问者模式
定义:允许操作应用到一组对象上,解耦操作和对象本身。应用场景:操作经常增加,对象本身稳定。特点:利用了重载,是在编译期间,由参数的声明类型决定的,而非运行时,根据参数的实际类型决定的。优点:增加新的操作,可以不要修改对象。非常方便。Single patch和double patch:Single 执行哪个对象的方法,根据运行时对象类型确定;执行对象的哪个方法,根据编译时的入参类型确定;Double 执行对象的哪个方法,根据运行时入参类型确定。c++和j...原创 2020-10-13 17:10:42 · 190 阅读 · 0 评论 -
行为型--迭代器模式(Iterator Design Pattern)
迭代器的意义:是为了遍历;迭代器和集合是组合关系,使得遍历的职责单一。迭代器模式的意义:对于类似数组和链表这样的数据结构,遍历方式比较简单,直接使用 for 循环来遍历就足够了。但是,对于复杂的数据结构(比如树、图)来说,有各种复杂的遍历方式。比如,树有前中后序、按层遍历,图有深度优先、广度优先遍历等等。如果由客户端代码来实现这些遍历算法,势必增加开发成本,而且容易写错。如果将这部分遍历的逻辑写到容器类中,也会导致容器类代码的复杂性。应用:针对图的遍历,我们就可以定义 DFS..原创 2020-10-13 17:08:16 · 195 阅读 · 0 评论 -
行为型--状态模式
概念:有限状态机,Finite State Machine,缩写为 FSM,简称为状态机它有 3 个部分组成:状态、事件、动作;事件触发状态的转移及动作的执行方式:if else状态的二维数组: 列:状态 /行:事件/ 元素:动作状态模式应用:超级玛丽 状态: 小玛丽,大玛丽,火焰玛丽;事件: 吃蘑菇,吃火焰,遇到小兵; 动作:。。。...原创 2020-09-29 10:38:35 · 89 阅读 · 0 评论 -
行为型--职责链模式
定义:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过 A 处理器处理,然后再把请求传递给 B 处理器,B 处理器处理完后再传递给 C 处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。实现:链表 or 数组找到能处理的对象,处理并退出 or 每个对象都处理应用场景:..原创 2020-09-29 09:07:11 · 152 阅读 · 0 评论 -
行为型--模版模式和策略模式
模板模式定义:算法(逻辑,步骤)骨架(模版);具体的步骤,在子类实现,不改变步骤顺序。目的:复用在父类,拓展子类。ps:可以备注,避免子类重写,or 必须重写。模板模式基于继承关系来实现,子类重写父类的抽象方法,是一种类之间的关系。同步回调指在函数返回之前执行回调函数(和模版类似);回调基于组合关系来实现,把一个对象传递给另一个对象,是一种对象之间的关系;异步回调指的是在函数返回之后执行回调函数。类似观察者模式回调基于组合,更灵活回调是一种双向调用关系...原创 2020-09-28 19:19:11 · 77 阅读 · 0 评论 -
行为型--观察者模式
观察者模式原创 2020-09-24 15:00:27 · 106 阅读 · 0 评论 -
结构型模式2
门面模式目的:定义一组高层接口让子系统更易用。举例:A,提供了 a、b、c、d 四个接口。系统 B 完成某个业务功能,需要调用 A 系统的 a、b、d 接口。利用门面模式,我们提供一个包裹 a、b、d 接口调用的门面接口 x,给系统 B 直接使用。应用:易用,符合接口隔离和迪米特法则。性能好,如果调用者要走网络,把三个接口一次性调用完,显然性能更高解决事务问题,要么都成功,要么都失败。ps:接口:太大会导致接口不可复用,太小会导致接口不易用。可以把门面接口和底层接口放在.原创 2020-09-23 20:17:42 · 90 阅读 · 0 评论 -
创建模式
null 没有查找or不存在,到是一种正常而非异常的行为 可以用空对象替代运行时异常 变异时异常直接吞掉、直接往上抛出、包裹成新的异常抛出pulic需要参数保护,private可以用契约规避。 单例设计模式(Singleton Design Pattern)构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例;考虑对象创建时的线程安全问题;考虑是否支持延迟加载;考虑 getInstance() 性能是否高(是否加锁)。...原创 2020-09-23 18:56:29 · 149 阅读 · 0 评论 -
备忘录模式
1.定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先的状态。2.角色a.主角(Originator)只有主角可以修改存档。是存档的友元。b.存档(Memento)c.存档器(Caretaker)保存存档,不修改。一个存档的数据结构。3.类图原创 2018-04-19 20:19:52 · 94 阅读 · 0 评论 -
设计模式--适配器模式
1. 什么是适配器模式?将一个类的接口转换成客户希望的另外一个接口。 2. 为什么要使用适配器模式?在软件开发中,有的时候系统的数据和行为都正确,但接口不符合,我们应该考虑使用适配器模式,目的是使控制范围之外的一个原有对象与某个接口匹配优点:1. 降低了去实现一个功能点的难度,可以对现有的类进行包装,就可以进行使用了;2. 提高了项目质量,现有的类一般都是经过测试的,使原创 2017-10-15 17:11:10 · 172 阅读 · 0 评论 -
设计模式--工厂模式
1.简单工厂模式有一个静态的工厂创建函数,负责创建各种工厂,符合依赖倒置原则;但是增加产品的时候需要修改工厂创建函数,不符合开放封闭原则;适用于产品较少的情况。2.工厂模式工厂模式和简单工厂的区别是将工厂类也进行抽象,这增加产品不需要修改工厂类,只需要增加工厂类,符合开放封闭原则。适用于经常需要增加产品的情况。3.抽象工厂模式抽象工厂和工厂模式的区别原创 2017-09-19 23:42:09 · 257 阅读 · 0 评论 -
设计模式--组合模式
1. 什么是组合模式?对树形的结构的各个对象,可以进行统一处理;即对叶子和节点(叶子的集合),可以进行统一的处理。2.为什么要使用适配器模式?方便客户端调用。客户不需要知道对象是叶子还是节点,可以使用相同的方法去调用。让客户可以一致地使用组合结构和单个对象3.适配器模式使用原则单各个对象是以树形的关系存在的。4.uml图其中IObject是叶子和节点的共同父类原创 2017-11-06 22:34:46 · 173 阅读 · 0 评论 -
设计模式--桥接模式(与装饰模式的区别)
区别:1.没有装饰者和被装饰者的主次区别,桥接和被桥接者是平等的,不用继承自同一个父类。(即桥接可以互换) 2.桥接模式不用使用同一个接口;装饰模式用同一个接口装饰,接口在父类中定义。相同点:都可以处理类扩散的情况原创 2017-11-16 14:02:41 · 2101 阅读 · 0 评论 -
设计模式--代理模式
1.目的:对核心对象(功能)提供一种代理,以控制对这个对象的访问。这样实现了业务和核心功能分离。2. 使用场景:a.保护代理:在用户登录时, 真正的登录类和代理登录类都实现了Login接口, 不同的是Proxy类的方法中增加了用户是否合法的判断, 只有合法时才去调用真正登录类的login方法.b.虚拟代理:可以让那些占用大量内存或处理起来非常复杂的对象推迟到使用它们的时候才转载 2017-12-09 16:01:39 · 150 阅读 · 0 评论 -
设计模式--命令模式
1.定义:“行为请求者”与“行为实现者(接收者)”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责原创 2018-01-12 11:30:05 · 171 阅读 · 0 评论 -
设计模式--策略模式
1.定义 策略模式把"干什么"和"怎么干"解耦合,将干的算法抽象出来,让算法修改替换增加的时候互不影响。2.使用场景干一件事情有n种干法(策略),干法们是平等的。3.优缺点 1)算法修改,替换和增加的时候互不影响;但是客户端有影响,比如新加算法,客户就要知道依赖于新的算法类。2)客户端决定什么情况下使用什么策略,系统的灵活性高;但客户端需要理解所有具体算法间的区转载 2018-01-14 20:53:40 · 210 阅读 · 0 评论 -
设计模式--状态模式
1.定义(目的)实现状态和行为的分离。2.使用场景行为随着状态改变(key),行为实现中有较多if else或switch语句3.类图 a.上图do1,do2,do3就是行为,state1,state2,state3就是行为。可以看到行为和状态分离了,增加状态满足开闭原则,但是增加行为不满足。b. 状态模式和策略模式的类图类似,策略模式各个策略间是平等的没有联系的;而原创 2018-01-07 13:14:52 · 608 阅读 · 0 评论 -
访问者模式
#include <iostream>using namespace std;class Element; class Visitor{public: virtual ~Visitor(){} virtual void visitConElemA(Element* elm)=0; virtual void visitConElemB(Element* elm)=0;p...转载 2018-03-26 19:48:23 · 161 阅读 · 0 评论 -
设计模式---装饰模式
http://blog.csdn.net/hailong0715/article/details/51751208装饰器模式(DECRATOR):为了实现动态的给对象添加职能,即从外部给对象添加相关职能。可以这样理解,比如说一个Person类,该类的操作有能吃、能睡、能跑、但假如随着人类的进化,某一天Person能飞了,能在水里游了等等,按照一般的写法是修改Person这个类,转载 2017-11-14 22:05:47 · 185 阅读 · 0 评论