设计模式(c++)笔记
文章平均质量分 96
GoF_23种设计模式,全部用C++来实现,着重于探讨解决的问题和适应的场景。
热血枫叶
开朗、活泼
展开
-
设计模式(c++)笔记 总结
一、设计模式分类: 按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模式。(分类如下表) 创建型模式用来处理对象的创建过程; 结构型模式用来处理类或者对象的组合; 行为型模式用来对类或对象怎样交互和怎样分配职责进行描述。表1-1原创 2013-10-25 15:55:49 · 2468 阅读 · 0 评论 -
设计模式(c++)笔记之二十三(Interpreter模式)
一、描述: 概念:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。最简单的例子是表达式运算。 Interpreter 模式典型的结构图为: Interpreter 模式中,提供了 TerminalExpression 和 Nontermin原创 2013-10-25 14:34:49 · 3036 阅读 · 0 评论 -
设计模式(c++)笔记之二十二(Iterator模式)
一、描述: 概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。 Iterator 模式典型的结构图为: Iterator 模式中定义的对外接口可以视客户成员的便捷定义,但是基本的接口在图中的Iterator 中已经给出了(参考 STL 的 Itera原创 2013-10-25 13:54:25 · 1661 阅读 · 0 评论 -
设计模式(c++)笔记之二十一(Chain of Responsibility模式)
一、描述: 概念:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 Chain of Responsibility 模式典型的结构图为: Chain of Responsibi原创 2013-10-25 10:52:34 · 1992 阅读 · 0 评论 -
设计模式(c++)笔记之二十(Visitor模式)
一 、描述 概念:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 其典型的结构图为: Visitor 模式在不破坏类的前提下,为类提供增加新的新操作。Visitor 模式的关键是双分派(Double-Dispat原创 2013-10-25 10:04:07 · 1927 阅读 · 0 评论 -
设计模式(c++)笔记之十九(Command模式)
一、描述: 命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。应该是一个比较简单的模式了。 Command 模式的典型结构图为: Command 模式结构图中,将请求的接收者(处理者)放到 Co原创 2013-10-24 20:19:47 · 1757 阅读 · 0 评论 -
设计模式(c++)笔记之十八(Mediator模式)
一、描述: 在面向对象系统的设计和开发过程中,对象之间的交互和通信是最为常见的情况,因为对象间的交互本身就是一种通信。在系统比较小的时候,可能对象间的通信不是很多、对象也比较少,我们可以直接硬编码到各个对象的方法中。但是当系统规模变大,对象的量变引起系统复杂度的急剧增加,对象间的通信也变得越来越复杂,这时候我们就要提供一个专门处理对象间交互和通信的类,这个中介原创 2013-10-24 18:11:57 · 2017 阅读 · 0 评论 -
设计模式(c++)笔记之十七(Memento模式)
一、描述: 没有人想犯错误,但是没有人能够不犯错误。犯了错误一般只能改过,却很难改正(恢复)。世界上没有后悔药,但是我们在进行软件系统的设计时候是要给用户后悔的权利(实际上可能也是用户要求的权利:),我们对一些关键性的操作肯定需要提供诸如撤销(Undo) 的操作。那这个后悔药就是 Memento 模式提供的。 Memento 模原创 2013-10-24 15:44:37 · 1662 阅读 · 0 评论 -
设计模式(c++)笔记之十六(Observer模式)
一、描述 观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。原创 2013-10-24 15:12:27 · 1700 阅读 · 0 评论 -
设计模式(c++)笔记之十五(State模式)
一、描述 概念:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。问题: 每个人、事物在不同的状态下会有不同表现(动作),而一个状态又会在不同的表现下转移到下一个不同的状态(State)。最简单的一个生活中的例子就是:地铁入口处,如果你放入正确的地铁票,门就会打开让你通过。在出口处也是验票,如果正确你就可以 ok,否则就原创 2013-10-24 11:15:15 · 2023 阅读 · 0 评论 -
设计模式(c++)笔记之十四(Strategy模式)
一、描述 Strategy 模式和 Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦,但Strategy 模式将逻辑(算法)封装到一个类(Context)里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。 Strategy 模式典型的原创 2013-10-23 20:25:33 · 1735 阅读 · 0 评论 -
设计模式(c++)笔记之十三(Template模式)
一、描述: 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template 提供了这种情况的一个实现框架。Template 模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。【注释1原创 2013-10-23 19:25:34 · 1545 阅读 · 0 评论 -
设计模式(c++)笔记之十一(Facade模式)
一、描述 Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。 举一个生活中的小例子,大凡开过学或者毕过业的都会体会到这样一种郁闷:你要去 n个地方办理 n 个手续(现在大学合并后就更加麻烦,因为可能那 n 个地方都隔的比较远)。但是实际上我们需要的就是一个原创 2013-10-23 16:23:46 · 1894 阅读 · 0 评论 -
设计模式(c++)笔记之十(Flyweight模式)
一、描述 设计模式中的享元模式,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类).问题 在面向对象系统的设计何实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为没有字母创建一个对象原创 2013-10-23 14:06:41 · 2194 阅读 · 0 评论 -
设计模式(c++)笔记之九(Composite模式)
一、描述 概念:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合的使用具有一致性。Composite 模式的典型结构图为: 图 2-1:Composite Pattern 结构图 二、实例:原创 2013-10-23 10:49:34 · 2469 阅读 · 0 评论 -
设计模式(c++)笔记之八(Decorator模式)
一、描述 装饰模式,动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。问题: 在 OO 设计和开发过程,可能会经常遇到以下的情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会给定义一个新类继承自定义好的类,这样会带来一个问题(将在本模式的讨论中给出)。通过继承的方原创 2013-10-21 11:55:15 · 1783 阅读 · 0 评论 -
设计模式(c++)笔记之七(Adapter模式)
一、描述: 适配器模式,使用之处比较特殊,不属于常规设计模式,主要用于不同系统之间的处理。是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。举个例子,比如我们有一个 Team 为外界提供 S 类服务,但是我们 Team 里面没有能够完成此项人物的 member,然后我们得知有 A 可以完成原创 2013-10-21 10:12:21 · 1828 阅读 · 0 评论 -
设计模式(c++)笔记之六(Bridge模式)
一、描述: 总结面向对象实际上就两句话:一是松耦合(Coupling),二是高内聚(Cohesion)。面向对象系统追求的目标就是尽可能地提高系统模块内部的内聚(Cohesion)、尽可能降低模块间的耦合(Coupling)。然而这也是面向对象设计过程中最为难把握的部分,大家肯定在OO 系统的开发过程中遇到这样的问题:1)客户给了你一个需求,于是使用一个类原创 2013-10-17 11:40:46 · 3014 阅读 · 0 评论 -
设计模式(c++)笔记之五(Prototype 模式)
一、描述: 关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的 3 根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要)。 Prototype 模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在 C++中拷贝构造函数(Copy Constructor)曾经是很对程序员的噩梦,原创 2013-10-17 10:09:04 · 3330 阅读 · 0 评论 -
设计模式(c++)笔记之四(Builder 模式)
一、描述 建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。一段晦涩难懂的文字,实现创建不同表示的方法就是给创建的过程传入创建的参数。详细的还是看代码吧。 举个例子:生活中有着很多的 Builder 的例子,个人觉得大学生活就是一个 Builder 模式的最好体验:要完成大学教育,一般将大学教育过程分成 4 个学期进行,因此没有学原创 2013-10-16 15:15:52 · 2443 阅读 · 3 评论 -
设计模式(c++)笔记之三(Singleton单例模式)
一、简介 个人认为 Singleton 模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。且不说公司企业在招聘的时候为了考察员工对设计的了解和把握,考的最多的就是 Singleton 模式。 Singleton 模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面原创 2013-10-14 16:02:38 · 2282 阅读 · 0 评论 -
设计模式(c++)笔记之二(AbstractFactory抽象工厂模式)
一、简介: 抽象工厂,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。对于工厂方法来说,抽象工厂可实现一系列产品的生产,抽象工厂更注重产品的组合。AbstractFactory 模式典型的结构图为: 图 2-1:AbstractFactory Pattern 结构图Abstract原创 2013-10-14 13:55:27 · 2793 阅读 · 3 评论 -
设计模式(c++)笔记之一(Factory Method工厂方法模式)
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。一、模式选择我们通常使用 Factory 模式来解决上面给出的两个问题。在第一个问题中,我们经常就原创 2013-10-14 11:24:19 · 3877 阅读 · 0 评论