如果您无法下载资料,请参考说明:
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
as****16
实名认证
内容提供者
最近下载