设计模式
fly_with_the_winds
热爱编程,熟悉C/C++
展开
-
设计模式-观察者模式(一)
定义:观察者模式,又叫发布-订阅模式。他定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。使用:一、当一个对象改变需要同时改变其他对象,同时它不知道具体有多少对象有待改变时,考虑观察者模式。 二、当一个抽象模型有两个方面,其中一方面依赖另一方面,这时用观察者模式可以将这两者封原创 2013-10-18 22:28:56 · 491 阅读 · 0 评论 -
设计模式-状态模式
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一些列类当中,可以把复杂的判断逻辑简化。好处:将与特定状态相关的行为局部化,并且将不同状态的行为分离开来,将特定的状态相关的行为放入一个对象中,通过定义新的子类可以很容易的增加新的状态和转换。当一个对象原创 2013-10-24 21:28:33 · 440 阅读 · 0 评论 -
设计模式-建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它主要适用于创建一些复杂的对象,这些对象内部构造间的构造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造者模式是当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方法时适用的设计模式。UML图如下:相关类代码如下:// Builder.cpp : Define原创 2013-10-17 21:53:21 · 417 阅读 · 0 评论 -
设计模式-外观模式
外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子系统更加容易使用。使用:首先,在设计初期,应有意识的将两个不同的层分离,在层与层之间建立外观Facade。 其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加一个外观Facade可以提供一个简单的接口,减少他们之间的依赖。 第三,在原创 2013-10-15 21:32:49 · 441 阅读 · 0 评论 -
设计模式-模板方法模式
模板方法模式定义:定义一个操作中的算法骨架,而把一些步骤延迟到子类中。模板方法模式可以让子类不改变一个算法的结构就可以改变算法的某些特定步骤。说明:有时候,我们经常遇到由一些列步骤构成的过程需要执行,这个过程从高层看是相同的,但有些步骤的实现可能不同,这个时候可以考虑模板方法模式。其结构图如下:设计实例(抄试卷):#include using namespace原创 2013-10-11 21:14:32 · 335 阅读 · 0 评论 -
简单工厂模式、策略模式与工厂方法模式
用三种设计模式实现同一种功能:四则运算。 三种设计模式相同的部分为四则运算类的设计,包括基类,加法运算类,减法运算类,乘法运算类和除法运算类,其代码如下:class CClac{public: virtual int GetResult(int a,int b)=0;};class CClacAdd:public CClac{public: virtual int原创 2013-08-26 21:53:56 · 511 阅读 · 0 评论 -
设计模式-代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式的使用情况: 1. 远程代理,也就是为了一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。 2. 虚拟代理,根据需要创建一个开销很大的对象,通过它来存放实例化需要很长时间的真实对象。 3. 安全代理,用来控制真实对象的访问权限。 4. 智能指引,当调原创 2013-08-20 22:06:36 · 360 阅读 · 0 评论 -
设计模式-装饰模式
装饰模式把每个要装饰的功能放在单独的类中,并在这个类中包含他要装饰的对象,当需要执行特殊行为时,客户端代码就可以根据需要有选择,有顺序的使用装饰功能包装对象了,他的好处就是有效的把类的核心功能和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。但是需要注意装饰顺序。 #include #include class Person{private: char name[30]原创 2013-08-20 21:50:30 · 356 阅读 · 0 评论 -
设计模式-观察者模式(二)
观察者模式有一个不足,在于所有观察者必须派生于同一个基类,并且实现方法Update,而在实际应用中,往往不能满足这种条件,因为不同的观察者可能是毫不相关的两个类,并且可能不会提供Update方法,解决的方法就是使用事件委托。C++中没有提供委托模型,需要自己构造,我们最容易想到的就是使用函数指针,而要取得类的成员函数指针,我们需要如下定义:class A{public:void原创 2013-10-19 22:18:00 · 397 阅读 · 0 评论