您所在位置: 网站首页 / 观察者模式.pdf / 文档详情
观察者模式.pdf 立即下载
2024-08-30
约3千字
约6页
0
246KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

观察者模式.pdf

观察者模式.pdf

预览

免费试读已结束,剩余 1 页请下载文档后查看

15 金币

下载文档

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

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
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

观察者模式

文档大小:246KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用