设计模式
valetine
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式学习-Decorator(装饰)
<br /> <br />意图:动态的为一个对象添加一些额外的职责,Decorator比子类更加灵活<br />示例图:<br /><br /><br />适用性:<br />在不影响对象的情况下,以动态,透明的方式给单个对象添加职责<br />处理那些可以撤销的职责<br />但不能使用子类进行扩充时/类被隐藏/类定义不能生成子类…<br />注意事项:<br />装饰对象的接口必须与它所装饰的Component的接口一致<br />示例代码:<br />//Compnent同时也是基类<br />cla原创 2011-05-10 22:07:00 · 431 阅读 · 0 评论 -
设计模式学习-Composite(组合模式)
<br /><br />意图:将对象组合成树型结构以表示”部分-整体”的层次结构。Composite使得用户对于单个对象和组合对象的使用具有一致性<br />Compoite模式的关键是一个抽象类,即表示具体类也表示容器.<br />示意图:<br /><br />适用性:<br />你想表示对象的部分-整体层次结构<br />你希望用户忽略组合对象和单个对象的不同,用户将统一的使用组合结构中的所有对象<br />示例代码:<br />animal:单个对象<br />//单个动物实体<br />class原创 2011-05-09 23:57:00 · 516 阅读 · 0 评论 -
设计模式学习-Bridge(桥接)
<br /> <br />意图:将抽象部分和它的实现部分分离,使得它们都可以独立的变化<br />适用性:<br />不希望抽象和实现部分有一个固定的绑定关系<br />类的抽象以及它的实现可以通过生成子类的方法加以扩充<br />对一个抽象的实现部分的修改应对客户不产生影响<br />你对客户晚产隐藏抽象的实现部分<br />示例图:<br /><br />示例代码:<br />//瓶子装液体,摇晃瓶子,液体跟着荡漾<br />//填充液体<br />void CBottle::Fill(CLiquid*原创 2011-05-23 22:36:00 · 458 阅读 · 0 评论 -
设计模式学习—Strategy(策略)
意图:定义一系列的算法,把他们一一封装起来,使得他们可以互相替代,使得算法可以独立于对象的变化适用性:许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时[ H O 8 7 ] ,可以使用策略模式。 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。 一个类定义了多种行为, 并且这些行为在这个类的操作中以多原创 2011-05-19 10:53:00 · 496 阅读 · 0 评论 -
设计模式学习-Memento(备忘录)
意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。一个备忘录(Memento)是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器(Originator)适用性:必须保持某个对象在某个时刻的状态如果一个用接口来让其它对象这节得到这些状态,将会暴露对象的实现细节并破坏对象的封装性示例图:示例代码://线条类class CLine{public: CLine(LineState STATE);public:原创 2011-05-15 22:45:00 · 514 阅读 · 0 评论 -
设计模式学习—Iterator(迭代器)
<br /><br />意图:提供一种方法顺序访问一个聚合对象中各个元素,而不需要暴露该对象的内部表示<br />适用性:<br />访问一个聚合类而无需暴露它的内部表示<br />支持对聚合对象的多种遍历<br />为遍历不同的聚合结构提供一个统一的接口<br />示例图:<br />示例代码:<br />个人观点可以参见stl的list/set/map等….原创 2011-05-15 15:46:00 · 398 阅读 · 0 评论 -
设计模式学习-Command(命令)
<br /><br />意图:讲一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作.<br />通过将请求本身变成一个对象来使工具箱对象可向未指定的应用对象提出请求<br />适用性:<br />抽象出待执行的动作以参数化某对象,可以通过回调函数表达这种参数化<br />支持取消操作(UnExecute)<br />示例图:<br /><br />示例代码:<br />#pragma once<br />#include "Move.h"<br原创 2011-05-14 10:34:00 · 463 阅读 · 0 评论 -
设计模式学习—Obeserver(观察者)
<br /><br />意图:定义对象的一种一对多的依赖关系,当一个对象的状态发生改变时,所以依赖于它的对象都要得到通知并且自动更新<br /> <br />适用性:<br /> <br />一个对象依赖于另外一个对象时,将这两者封装在独立的对象中以使它们各自独立地改变和使用<br /> <br />当对一个对象的改变需要同时改变其它对象而不知道具体有多少对象有待改变<br /> <br />当一个对象必须通知其它对象,而它又不能假设其它对象是谁。换言之,你不希望这些对象时紧密耦合的。<br /> <br原创 2011-05-15 22:54:00 · 511 阅读 · 0 评论 -
设计模式学习—Mediator(中介者)
意图:用一个中介对象来封装一系列的独享交互。中介者使得各对象不需要显式的相互引用,从而使得其耦合松散,而且可以独立的改变他们之间的交互.适用性:一组对象以定义好,但是通信复杂,相互依赖关系结构混乱一个对象引用其他对象并且直接通信想定制一个分布在多个类中的行为,但是又不想定义多个子类示例图:示例程序://信息变化之后通知中介者,中介者来调用相关对象进行相应的控制class CMediator{public: CMediator();public: ~CMediator(void); pu原创 2011-05-15 16:36:00 · 425 阅读 · 0 评论 -
设计模式学习-Prototype(原型)
<br /><br />意图:用原型示例指定创建对象的种类,通过拷贝这些原型创建新的对象<br />适用性:<br />当实例化的类是在运行时指定时<br />为了避免创建一个与产品类平行的工厂类<br />当一个类的示例只能有几个不同状态组合中的一种时<br />示例图:<br /><br />示例代码:<br />#pragma once<br />//孙悟空一变二二变四…<br />class CMonkeyKing<br />{<br />public:<br /> CMonkeyKing(i原创 2011-05-14 11:27:00 · 638 阅读 · 0 评论 -
设计模式学习-Proxy(代理模式)
<br /> <br />意图:为其他对象提供一种代理以控制对这个对象的访问<br />动机:为了只有在我们确实需要这个对象时才对它进行创建和初始化用一个proxy替代那个对象并在需要的时候实例化这个对象<br />适用性:在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用代理(Proxy)模式<br />示例图:<br /><br />听众听人演讲,演讲者通过扩音器来演说,扩音器起来的了一个中间代理的作用.<br />示例代码:<br />//演讲者基类<br />class CSpeaker<b原创 2011-05-13 00:16:00 · 465 阅读 · 0 评论 -
设计模式学习—Interpreter(解释器)
<br /><br />意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。如果一种特定类型的问题发生的频率足够高,那么就可值得将该问题的各个实例表述为一个简单语言的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。解释器模式使用类来表达每一条文法规则,在规则右边的符号是这些类的实例变量。<br />适用性:<br />当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树,可以使用解释器模式。而当存在以下情况时该模式效果最好<原创 2011-05-15 15:21:00 · 463 阅读 · 0 评论 -
设计模式学习-Chain Of Responsiblity(责任链)
<br /><br />意图:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递请求,直到一个对象处理它为止.<br />适用性:<br />有多个对象可以处理一个请求,那个对象处理该请求运行时自动确定<br />你想在不明确制定接受者的情况下,向多个对象中的一个提交一个请求<br />可处理一个请求的对象集合应被动态指定<br />示例图:<br /><br />示例代码:<br />class CHandler<br />{<br />publ原创 2011-05-14 09:52:00 · 521 阅读 · 0 评论 -
设计模式学习-Factory Method(工厂方法)
<br /><br />意图:定义一个用于创建对象的接口,让子类决定实例化哪个类<br />适用性:<br />当一个类不知道它所必须创建的类的对象时<br />当一个类希望由它的子类来制定它所创建的对象的时候<br />当类将创建对象的职责委托给多个帮助子类的一个是,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候<br />示例图:<br /><br />示例代码: <br />//工厂根据产品id生产产品<br />class CFactory<br />{<br />public:<br />原创 2011-05-14 11:02:00 · 405 阅读 · 0 评论 -
设计模式学习-Builder(生成器
意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示示意图:适用性:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时当构造过程必须允许被构造的对象有不同的表示时示例代码://部件类class CPart{public: CPart(void);public: ~CPart(void);public: virtual void Build()=0; virtual void Display()=0;};//部件Aclass CPart原创 2011-05-12 00:02:00 · 479 阅读 · 0 评论 -
设计模式学习-FLYWEIGH(享元)
<br /><br />意图:运用共享技术有效地支持大量细粒度的对象,FLYWEIGHT对那些通常因为数量太多而难以用对象来表示的概念或者实体进行建模.<br />示意图:<br /><br />适用性:<br />对象可以被共享使用的情况<br />示例代码:<br />//flyweight类<br />class CPerson<br />{<br />public:<br /> CPerson(int id)<br /> {<br /> m_id = id;<br />原创 2011-05-11 22:48:00 · 447 阅读 · 0 评论 -
设计模式学习-Facade(外观)
意图:为子系统中的一组接口提供一个一致的界面.定义一个高层接口,该接口是的这一个子系统的更加容易使用.动机:是的子系统之间的通信和相互依赖达到最小,达到该目的的途径之一就是引入一个外观(Facade)对象,它为子系统中较为一般的设施提供了一个单一而简单的界面.示例图:Facade作为生态子系统的统一界面用于外接交互适用性:为复杂子系统提供一个简单接口Facade提供了客户与子系统以及其他子系统的分离为各个自系统提供每层的入口点.示例代码://生态子系统的Facade类作为外部接口的界面,内部子系统的复杂构建原创 2011-05-11 00:59:00 · 394 阅读 · 0 评论 -
设计模式学习-抽象工厂(Abstract Factory)
意图:为一系列相关对象或相互依赖对象提供一个创建接口.示意图:AbstractFactory为创建对象声明一个接口,真正创建对象由ConcreteFactory(FactoryA/FactoryB)实现.一个具体的工厂将为每个产品中定义该工厂方法以指定产品.适用性:一个系统要独立于他的产品的创建,组合和表示时一个系统要由多个产品系列中的一个配置时当你强调一系列相关的产品对象的设计以便进行联合使用时当你提供一个产品类库,而只想显示它们的接口而不是实现时代码示例:client://具体创建何种产品有Factor原创 2011-05-09 22:36:00 · 410 阅读 · 0 评论
分享