![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式C++实现
今晚打酱油8
这个作者很懒,什么都没留下…
展开
-
大话设计模式--观察者模式 Observer -- C++ 实现实例
1.观察者模式: 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有的 观察者对象,使他们能够自动更新自己。 使用场合: 当一个对象的改变需要同时改变其他对象时,而且它不知道具体有多少对象有待改变。 当一个抽象模型有两个方面,其中一个方面依赖另一个方面,这时观察者模式可以使这两者封装在独立的对象中使它们各自独立地改变和复用原创 2013-10-10 14:42:51 · 835 阅读 · 0 评论 -
大话设计模式--备忘录 Memento -- C++实现实例
1. 备忘录: 在不破坏封装性的前提下, 捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后可将该对象恢复到原先保存的状态。 Originator 发起人: 负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。 Memento 备忘录: 负责储存Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录Mem原创 2013-10-15 13:45:17 · 670 阅读 · 0 评论 -
大话设计模式--工厂模式 factory -- C++实现实例
实现《大话设计模式》的C++版本。。。 1. 工厂模式 使用的范围是 同一个基类,下面很多子类。 (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ×××;的代码。这里带来两个问题1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就原创 2013-10-07 15:53:42 · 775 阅读 · 0 评论 -
大话设计模式--抽象工厂模式 Abstract Factory -- C++实现实例
1. 抽象工厂模式: 提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。原创 2013-10-10 16:36:07 · 793 阅读 · 0 评论 -
大话设计模式--命令模式 Command -- C++实现实例
1. 命令模式: 将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。 命令模式有点: a. 较容易的设计一个命令队列 b. 在需要的的情况下,可以较容易的将命令加入日志 c. 允许请求的一方决定是否要否决请求。 d. 可以容易的实现对请求的撤销和重做。 e. 加入具体新的命令类不影响其他的类。 实例: recei原创 2013-10-16 16:27:01 · 738 阅读 · 0 评论 -
大话设计模式--桥接模式 Bridge -- C++实现实例
1. 桥接模式: 将抽象部分与它的实现部分分离,使它们都可以独立的变化。 分离是指 抽象类和它的派生类用来实现自己的对象分离。 实现系统可以有多角度分类,每一种分类都有可能变化,那么把这种多角度分离出来让他们独立变化,减少他们之间的耦合。 实例: implementor.h implementor.cpp 实现接口 #ifndef IMPLEMENTOR_H原创 2013-10-16 11:17:40 · 831 阅读 · 0 评论 -
大话设计模式--职责连模式 Chain of Resposibility -- C++实现实例
1. 职责链模式: 使多个对象都有机会处理请求,从而避免请求发送者和接受者之间的耦合关系,将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。 当客户提交一个请求时,请求是沿着链传递直到有一个ConcreteHandler对象负责处理它,接收者和发送者都没有对方的明确信息,且链中的对象并不知道链的结构。 结果是职责链可以简化对象的互相连接,他们仅需一个指向其后继者的引用,而原创 2013-10-17 08:51:30 · 656 阅读 · 0 评论 -
大话设计模式--中介者模式 Mediator --C++实现实例
1. 中介者模式: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立改变他们之间的交互。 Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator. 由于ConcreteMediator控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者变为比任原创 2013-10-17 10:59:42 · 1169 阅读 · 0 评论 -
大话设计模式--解释器模式 interpreter -- C++实现实例
1. 解释器模式: 给定一个语言,定义它的文法的一种表示 并 定义一个解释器,这个解释器使用该表示文法 来解释语言中的句子。 如果一种特定类型的问题发生的频率很高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 当一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。原创 2013-10-21 16:01:14 · 927 阅读 · 0 评论 -
大话设计模式--享元模式 Flyweight -- C++实现实例
1. 享元模式: 运用共享技术有效地支持大量细粒度的对象。 享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生成大量颗粒度的类实例来表示数据,如果能发现这些实例除了几个参数外基本都是相同的,有时就能够受大幅度地减少需要实例化的类的数量,如果能把那些参数移到类实例的外面,在方法调用时将他们传递进来,就可以通过共享大幅度地减少单个实例的数目。 如果一个应用程序使用了大量对象,而原创 2013-10-18 11:45:30 · 740 阅读 · 0 评论 -
大话设计模式--状态模式 State -- C++实现实例
1.状态模式: 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就像是改变了其类。 状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂, 把状态的判断逻辑转移到表示不同状态的一系列类当中, 可以把复杂的判断逻辑简化。 状态模式通过把各种状态转移逻辑分布到State的子类之间,减少相互之间的依赖。 当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时原创 2013-10-15 09:49:17 · 668 阅读 · 0 评论 -
大话设计模式--装饰者模式 Decorator -- C++实现实例
1.装饰者模式 Decorator 动态地给一个对象添加一个额外的职责, 就添加功能来说, 装饰模式比生成子类更为灵活。 每个装饰对象的实现和如何使用这个对象分离, 每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链中。 实例: 人和衣服的装饰关系。 person.h Person类 #ifndef PERSON_H #define PERS原创 2013-10-08 14:46:15 · 744 阅读 · 0 评论 -
大话设计模式--代理模式 proxy
1. 代理模式: 为其他对象提供一种代理以控制这个对象的访问。 代理模式使用场合: a. 远程代理, 为一个对象在不同的地址空间提供局部代理,隐藏一个对象存在于不同地址空间的事实。如.net中WebService的应用。 b. 虚拟代理, 根据需要创建开销很大的对象, 通过它来存放实例化需要很长时间的真是对象。 如浏览器中 大图片的 显示过程,先显示一个代理,下载完成后在显示真实。 c原创 2013-10-08 15:52:53 · 777 阅读 · 0 评论 -
大话设计模式--工厂方法模式 Factory Method -- C++实现
1. 工厂方法模式 定义一个用于创建对象的接口, 让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 和简单工厂模式相比: A: 简单工厂模式最大的优点在于工厂类中包含有必要的逻辑判断, 根据客户端的选择条件动态实例化相关的类,对客户端来说去除了与具体产品的依赖。 但缺点是 添加新产品时 需要修改工厂类 case, 违背了 "开放-封闭" 原则。 B: 工厂方法模式实现时原创 2013-10-09 09:06:02 · 674 阅读 · 0 评论 -
大话设计模式--原型模式 Prototype -- C++实现
1. 原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。。。 注意: 拷贝的时候是浅拷贝 还是 深拷贝, 来考虑是否需要重写拷贝构造函数。 关键在于: virtual Prototype* clone(); 克隆函数。。。返回一个克隆的对象。 实例: 以深拷贝为例 prototype.h prototype.cpp #ifndef PROTOTY原创 2013-10-09 10:35:01 · 662 阅读 · 0 评论 -
大话设计模式--模板方法模式 TemplateMethod -- C++ 实现
1. 模板方法模式: 定义一个操作中的算法骨架,而将一些操作延迟到子类, 模板方法模式使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤。 当不变和可变的行为在方法的子类实现中混在一起的时候,不变的行为就会子类中重复出现,通过模板方法模式可以将这些不变的行为搬到一个地方,这样就可帮助子类摆脱重复的不变行为的纠缠。 模板方法模式就是提供一个很好的代码复用平台。原创 2013-10-09 11:33:19 · 584 阅读 · 0 评论 -
大话设计模式--外观模式 Facade -- C++实现实例
1. 外观模式: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。 外观模式的使用场合: A: 设计初期阶段,应该要有意识的将不同的两个层分离。 B: 在开发阶段,子系统往往由于不断的重构演化而变得越来越复杂, C: 在维护一个遗留的大系统时,可能这个系统已经非常难以维护和扩展。 将 和复杂的子系统打交道的任务交给 F原创 2013-10-09 15:08:32 · 665 阅读 · 0 评论 -
大话设计模式--建造者模式 Builder -- C++实现实例
1. 建造者模式,将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。 用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。 关键类Director,用它来控制建造过程,用它来隔离用户与建造过程的关联。 适用场合主要是用于创建一些复杂的对象, 这些对象内部的构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。原创 2013-10-10 09:21:40 · 788 阅读 · 0 评论 -
大话设计模式--适配器模式 Adapter -- C++实现实例
1.适配器模式: 将一个类的接口转换为客户希望的另一个接口,使得原来由于接口不能一起工作的那些类一起工作。 适配器模式一般用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。 适配器模式分为类适配器模式和对象适配器模式。 应该是双方都不太容易修改的时候再使用适配器模式,这是”亡羊补牢“, 首先应该是设计要完善,再次是重构,最后才是适配器。 ------------原创 2013-10-15 10:31:55 · 863 阅读 · 0 评论 -
大话设计模式--组合模式 Composite -- C++实现实例
1. 组合模式: 将对象组合成树形结构以表示”部分--整体“的层次结构,组合模式使用户对单个对象和组合对象的使用具有一致性。 需求中是体现部分与整体层次的结构时,希望用户可以忽略组合对象和单个对象的不同,统一地使用组合结构中的所有对象时,就可以用组合模式。 实例: company.h company.cpp #ifndef COMPANY_H #define CO原创 2013-10-15 15:20:24 · 647 阅读 · 0 评论 -
大话设计模式--策略模式 strategy -- C++实现实例
1. 策略模式: 它定义了算法家族, 分别封装起来,使他们之间可以相互替换,此模式让算法变化, 不会影响到使用算法的客户。 用相同的方法调用不同的算法,减少各种算法类与使用算法类之间的耦合。 实例: strategy.h 策略基类 #ifndef STRATEGY_H #define STRATEGY_H class Strategy { public:原创 2013-10-08 09:30:45 · 644 阅读 · 0 评论 -
大话设计模式--访问者模式 Visitor -- C++实现实例
1. 访问者模式: 表示一个作用于某对象结构中的和元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式把数据结构和作用于结构上的操作之间的耦合脱开,使得操作集合可以相对自由地演化。 访问者模式的目的是把处理从数据结构分离出来,适用于 有比较稳定的数据结构,又有易于变化的算法。 添加新的操作很简单,只需要添加一个新的访问者就可以了。原创 2013-10-23 10:57:05 · 944 阅读 · 0 评论