预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

目录 1.观察者模式(ObserverPattern)..................................................................................2 2.命令模式(ObserverPattern)......................................................................................6 1 1.观察者模式(ObserverPattern) 1.1.描述:[模式的定义和简单的具体描述] 观察者模式定义了对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所 有依赖他的对象都得到通知并自动更新。观察者模式中关键的对象是目标(Subject)和观 察着(observer)。一个目标可以有任意数目的依赖它的观察者。一旦目标的状态发生改变, 所有的观察者都得到通知。作为对这个通知的响应,每个观察者都查询目标以使其状态与目 标状态同步。 1.2.类图:[模式的类图以及类图中每个类的说明] Subject(目标): 定义了Suject的接口,一般使用抽象类(C++)或者接口(JAVA)的方式实现。其中包 含三个方法:Attach方法用于加入Observer,Dettach的方法用于移除Observer,Notify 方法用于通知Observer。 Observer(观察者): 2 定义了Observer的接口,与Suject类似,一般使用抽象类(C++)或者接口(JAVA) 的方式实现。Update方法用于更新Observer的显示。 ConcreteSubject(具体目标): 继承Suject抽象类(C++)或者实现了Suject接口(JAVA)的具体Suject类,负责 保存注册的Observer以及在自身状态发生改变时通知Observer的具体实现。 ConcreteObserver(具体观察者): 继承Observer抽象类(C++)或者实现了Observer接口(JAVA)的具体Observer 类。保存所依赖的Suject对象的引用,并通过更新的方式保证自身的状态和所依赖的Suject 状态一致。 1.3.实现演示代码:[C++和Java都可以] 简介:使用Observer模式实现以多种方式表示时间。 3 Subject抽象类 classObserver; classSubject{ public: virtual~Subject(); virtualvoidAttach(Observer*); virtualvoidDetach(Observer*); virtualvoidNotify(); project: Subject(); private: List<Observer*>_observer_list; }; voidSubject::Attach(Observer*o){_observer_list.Append(o);} voidSubject::Detach(Observer*o){_observer_list.Remove(o);} voidSubject::Notify(){ List<Observer*>::iteratorite=_observer_list.begin() ,ite_end=_observer_list.end(); for(;ite!=ite_end;ite++){ (*ite)->update(this); } } classSubject; classObserver{ public: virtual~Observer(); virtualvoidUpdate(Subject*)=0; project: Observer(); Observer纯虚类 4 保存时间信息的ClockSuject类。 Tick方法由一个内部的计时器每隔一段时间(比如1s)进行调用。Tick方法随后更新 时钟信息并且调用notify通知调用者。 VoidClockSuject::Tick(){ //updateinternaltime-keepingstate //… classthisClockSuject->update();:publicSubject{ public:} ClockSuject(); virtualintgetHour(); virtualintgetMin(); virtualintgetSec(); voidTick();//callbyainternalclockeveryseco