1. 访问者模式: 表示一个作用于某对象结构中的和元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式把数据结构和作用于结构上的操作之间的耦合脱开,使得操作集合可以相对自由地演化. 访问者模式的目的是把处理从数据结构分离出来,适用于 有比较稳定的数据结构,又有易于变化的算法. 添加新的操作很简单,只需要添加一个新的访问者就可以了. 实例: action.h action.cpp  扮演访问者的角色,添加新操作,添加其子类实例就可以了 #ifndef ACTIO…
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------主要内容包括: 初识访问者模式,包括: 定义.结构.参考实现 体会访问者模式,包括: 场景问题.不用模式的解决方案.使用模式的解决方案 理解访问者模式,包括: 认识访问者模式.操作组合对象结构.谁负责遍历所有元素对象.访问者模式的优缺点 思考访问者模式,包括: 访问者模式的本质.何时选用 参考内容: 1.<研磨设计模式> 一…
一.概述由于需求的改变,某些类常常需要增加新的功能,但由于种种原因这些类层次必须保持稳定,不允许开发人员随意修改.对此,访问者模式可以在不更改类层次结构的前提下透明的为各个类动态添加新的功能.二.访问者模式访问者模式表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.其结构图如下: Visitor为每一个ConcreteElement声明一个Visitor操作.ConcreteVisitor实现了Visitor声明的操作,其定义的行为就是需要…
实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ×××;的代码.这里带来两个问题1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就姑且不论不同程序员千奇百怪的个人偏好了.),2)程序的扩展性和维护变得越来越困难. (2)还有一种情况就是在…
1. 解释器模式: 给定一个语言,定义它的文法的一种表示 并 定义一个解释器,这个解释器使用该表示文法 来解释语言中的句子. 如果一种特定类型的问题发生的频率很高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题. 当一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象语法树时,可使用解释器模式. 实例: context.h  context.cpp  需要解释的文本内容 #ifndef CONTEXT_H #d…
1. 命令模式: 将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作. 命令模式有点: a. 较容易的设计一个命令队列 b. 在需要的的情况下,可以较容易的将命令加入日志 c. 允许请求的一方决定是否要否决请求. d. 可以容易的实现对请求的撤销和重做. e. 加入具体新的命令类不影响其他的类. 实例: receiver.h receiver.cpp  实际操作者  烤肉者 #ifndef RECEIVER_H #define RECE…
1. 桥接模式: 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 分离是指 抽象类和它的派生类用来实现自己的对象分离. 实现系统可以有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让他们独立变化,减少他们之间的耦合. 实例: implementor.h implementor.cpp  实现接口 #ifndef IMPLEMENTOR_H #define IMPLEMENTOR_H class Implementor { public: Implementor(); voi…
1. 组合模式: 将对象组合成树形结构以表示"部分--整体"的层次结构,组合模式使用户对单个对象和组合对象的使用具有一致性. 需求中是体现部分与整体层次的结构时,希望用户可以忽略组合对象和单个对象的不同,统一地使用组合结构中的所有对象时,就可以用组合模式. 实例: company.h company.cpp #ifndef COMPANY_H #define COMPANY_H #include <QString> class Company { public: Compa…
1.状态模式: 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就像是改变了其类. 状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂, 把状态的判断逻辑转移到表示不同状态的一系列类当中, 可以把复杂的判断逻辑简化. 状态模式通过把各种状态转移逻辑分布到State的子类之间,减少相互之间的依赖. 当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式. 实例:: context.h context.cpp #ifndef CONTEXT…
1. 建造者模式,将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. 用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了. 关键类Director,用它来控制建造过程,用它来隔离用户与建造过程的关联. 适用场合主要是用于创建一些复杂的对象, 这些对象内部的构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化. 在创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式适用的模式. 建造者模式的好处就是使得建造代码与表示代…