设计模式
smuggler_2003
这个作者很懒,什么都没留下…
展开
-
追MM与设计模式
偶然看到的,晕啊,设计模式居然可以形容成这样子,真是高人。原文:追MM和设计模式 创建型模式 1、FACTORY一追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可转载 2006-07-11 16:54:00 · 731 阅读 · 0 评论 -
设计模式学习笔记(三)——Factory Method工厂方法
三、Factory Method(工厂方法)情景举例:创建一个可重用的建造迷宫程序。代码示例:class MazeGame {public: Maze* CreateMaze();/**/// 以下4个方法为工厂方法:/**/ virtual Maze* MakeMaze() const { return new Maz原创 2007-02-08 10:13:00 · 532 阅读 · 0 评论 -
设计模式学习笔记(二十)——Memento备忘录
十八、Memento(备忘录)情景举例:捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。代码示例:class Graphic; // base class for graphical objects in the graphical editor/* 原发器的接口。注意:这是个Singleton模式*/class原创 2007-04-29 08:53:00 · 643 阅读 · 0 评论 -
设计模式学习笔记(十五)——Chain Of Responsibility职责链
十三、Chain Of Responsibility(职责链)情景举例:将对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。代码示例:/* 所有链上对象的抽象父类* 注意:私有成员函数中有个变量指向后继对象,并在构造函数中初始化这个对象*/typedef int Topic;const Topic NO_HELP_TOPIC = -1; cl原创 2007-04-29 08:46:00 · 580 阅读 · 0 评论 -
设计模式学习笔记(二十三)——Strategy策略
二十一、Strategy(策略)情景举例:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。代码示例:/* 使用Strategy的类(ok,客户)*/class Composition {public: Composition(Compositor*); void Repair();p原创 2007-04-29 08:58:00 · 613 阅读 · 0 评论 -
设计模式学习笔记(二十四)——Template Method模板方法
二十二、Template Method(模板方法)情景举例:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。代码示例:/* 父类*/class View {public: void Display(); void SetFocus(); virtual void DoDi原创 2007-04-29 09:00:00 · 548 阅读 · 0 评论 -
设计模式学习笔记(十八)——Iterator迭代器
十六、Iterator(迭代器)情景举例:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。代码示例:/* List的抽象父类*/template class List {public: List(long size = DEFAULT_LIST_CAPACITY);/**/ Iterator* CreateIt原创 2007-04-29 08:50:00 · 733 阅读 · 0 评论 -
设计模式学习笔记(二十一)——Observer观察者
十九、Observer(观察者)情景举例:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。代码示例:/* 观察者的抽象父类。注意:Update是一个模板方法*/class Observer {public: virtual ~ Observer(); virtual void Update(S原创 2007-04-29 08:54:00 · 704 阅读 · 0 评论 -
设计模式学习笔记(十六)——Command命令
十四、Command(命令)情景举例:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。代码示例:/* 命令的公共父类:只定义了一个Execute纯虚函数。*/class Command {public: virtual ~Command(); virtual void Execu原创 2007-04-29 08:47:00 · 662 阅读 · 0 评论 -
设计模式学习笔记(十七)——Interpreter解释器
十五、Interpreter(解释器)情景举例:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。代码示例:/* 该例子以布尔表达式的文法为例,文法如下:BooleanExp = VariableExp|Constant|OrExp|AndExp|NotExp|’(BooleanExp)’AndExp = BooleanExp原创 2007-04-29 08:48:00 · 675 阅读 · 0 评论 -
设计模式学习笔记(十九)——Mediator中介者
十七、Mediator(中介者)情景举例:用一个中介对象来封装一系列的对象交互。代码示例:/* Mediator抽象父类*/class DialogDirector {public: virtual ~DialogDirector(); virtual void ShowDialog(); virtual void WidgetCha原创 2007-04-29 08:51:00 · 699 阅读 · 0 评论 -
设计模式学习笔记(二十二)——State状态
二十、State(状态)情景举例:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。代码示例:/* TCPOctetStream类使用了State模式,它包含一个TCPState类*/class TCPOctetStream;class TCPState; class TCPConnection {public: TCPCon原创 2007-04-29 08:55:00 · 671 阅读 · 0 评论 -
设计模式学习笔记(十四)——结构型模式总结
结构型模式总结1、Adapter与Bridge:共同点:它们都给另一对象提供了一定程度上的间接性,有利于系统的灵活。都涉及到从自身以外的一个接口向这个对象转发请求。不同点:Adapter模式主要考虑2个已有接口不匹配的问题,它完全不考虑接口的实现,也不考虑它们各自如何演化。Adapter模式在类已经设计好以后实施。Bridge模式则对抽象接口与它的(可能是多个)实现部分进行桥接,使得你原创 2007-02-08 10:38:00 · 679 阅读 · 0 评论 -
设计模式学习笔记(十一)——Facade外观
十、Facade(外观)情景举例:为子系统中的一组接口提供一个一致的界面代码示例:/* 系统中各种类*/class Scanner ;class Parser ;class ProgramNodeBuilder ;class ProgramNode ;class CodeGenerator ;class ExpressionNode : public P原创 2007-02-08 10:32:00 · 467 阅读 · 0 评论 -
设计模式学习笔记(五)——Singleton单件
五、Singleton(单件)情景举例:保证仅有一个迷宫工厂的实例。代码示例:/* 注意静态函数和静态变量,它们实现了单件 构造函数设为protected以供子类访问,若没有子类可以设为private*/class MazeFactory {public: static MazeFactory* Instance(); // exist原创 2007-02-08 10:17:00 · 545 阅读 · 0 评论 -
设计模式学习笔记(六)——创建型模式总结
创建型模式主要分为2种,一种是生成创建对象的类的子类的方法,对应于Factory Method模式,其优点是简单,相对于其他模式需要新的类,它只需要新的操作即可。人们通常将Factory Method作为一种标准的创建对象的方法。但这种方法的主要缺点是:仅仅为了改变产品类,就需要创建一个新的子类。最终造成子类庞大而无法管理。 另一种方法是定义一个对象负责明确产品对象的类,并将其作为原创 2007-02-08 10:18:00 · 837 阅读 · 0 评论 -
设计模式学习笔记(十三)——Proxy代理
十二、Proxy(代理)情景举例:为其他对象提供一种代理以控制对这个对象的访问。四种常见情况:(1)远程代理(2)虚代理(3)保护代理(4)智能指针代码示例:/* 这个例子是虚代理的例子。*//* 代理类与实际类公共接口*/class Graphic {public: virtual ~Graphic();/**/ virtual原创 2007-02-08 10:35:00 · 649 阅读 · 0 评论 -
设计模式学习笔记(一)——Abstract Factory抽象工厂
终于读完了四人组的设计模式,感觉仍有很多地方不理解。果然不是读一次就完全理解的,这里写下一点笔记,整理一下心得,方便以后查阅。笔记主要以代码为主,并结合设计模式迷你手册一同查阅。(设计模式迷你手册中的代码完全照抄四人组的设计模式,但完全不加任何注释,看的晕晕的。)一、Abstract Factory(抽象工厂)情景举例:创建一个可重用的建造迷宫程序。代码示例:c原创 2007-02-08 09:33:00 · 622 阅读 · 0 评论 -
设计模式学习笔记(二)——Build生成器
二、Build(生成器)情景举例:创建一个可重用的建造迷宫程序。代码示例:/* 用非抽象类来让客户只定义自己感兴趣的操作*/class MazeBuilder {public: virtual void BuildMaze() { } virtual void BuildRoom(int room) { } virtual void Bui原创 2007-02-08 09:46:00 · 614 阅读 · 0 评论 -
设计模式学习笔记(四)——Prototype原型
四、Prototype(原型)情景举例:创建一个可重用的建造迷宫程序。代码示例:/* 原型工厂继承自抽象工厂类*/class MazePrototypeFactory : public MazeFactory {public: MazePrototypeFactory(Maze*, Wall*, Room*, Door*);/**/ virt原创 2007-02-08 10:16:00 · 604 阅读 · 0 评论 -
设计模式学习笔记(九)——Composite组成
八、Composite(组成)情景举例:将对象组合成树形结构以表示“部分-整体”的层次结构。代码示例:/* 最关键的抽象类,涵盖了叶子与容器的接口*/class Equipment {public: virtual ~Equipment(); const char* Name() { return _name; }/**/ v原创 2007-02-08 10:29:00 · 529 阅读 · 0 评论 -
设计模式学习笔记(十)——Decorator装饰
九、Decorator(装饰)情景举例:动态地给一个对象添加一些额外的职责。代码示例:/* 装饰与待装饰类共同的抽象类*/class VisualComponent {public: VisualComponent(); virtual void Draw(); virtual void Resize(); // ...原创 2007-02-08 10:30:00 · 528 阅读 · 0 评论 -
设计模式学习笔记(十二)——Flyweight享元
十一、Flyweight(享元)情景举例:运用共享技术有效地支持大量细粒度的对象。代码示例:/* Flyweight抽象类。其操作中的GlyphContext下文会介绍*/class Glyph {public: virtual ~Glyph(); virtual void Draw(Window*, GlyphContext&);/*原创 2007-02-08 10:34:00 · 689 阅读 · 0 评论 -
设计模式学习笔记(七)——Adapter适配器
六、Adapter(适配器)情景举例:解决类之间由于接口不匹配而不能复用的情况。代码示例:/* 目标类*/class Shape {public: Shape(); virtual void BoundingBox( Point& bottomLeft, Point& topRight ) const; virt原创 2007-02-08 10:24:00 · 528 阅读 · 0 评论 -
设计模式学习笔记(八)——Bridge桥接
七、Bridge(桥接)情景举例:将抽象部分与它的实现部分分离,使它们都可以独立地变化。代码示例:/* 抽象部分的接口*/class Window {public: Window(View* contents); // requests handled by window virtual void DrawContents();/原创 2007-02-08 10:26:00 · 543 阅读 · 0 评论 -
设计模式学习笔记(二十五)——Visitor访问者
二十三、Visitor(访问者)情景举例:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。代码示例:/* 被访问类的父类,注意其中虚拟函数Accept是提供给访问者的接口*/class Equipment {public: virtual ~Equipment(); const char原创 2007-04-29 09:02:00 · 664 阅读 · 0 评论