观察者模型课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《观察者模型课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 观察者 模型 课件
- 资源描述:
-
1、Observer 模式 从生活中走进观察者模式从生活中走进观察者模式 在日常生活中,常常会有这样的情形:当某件事情发生时,就应该通知所有的相关者。例如,如果我们的课程改变了时间和地点,就应该通知所有选了这门课程的同学。 在软件设计中,也有类似的问题:当一个对象的状态发生变化时,如何能够通知与其相关的所有其他对象,而不用修改该对象的代码? 初析观察者模型初析观察者模型 在许多设计中,经常涉及到多个对象都对一个特殊对在许多设计中,经常涉及到多个对象都对一个特殊对象中的数据变化感兴趣,而且这多个对象都希望跟踪那个象中的数据变化感兴趣,而且这多个对象都希望跟踪那个特殊对象中的数据变化。特殊对象中的数据
2、变化。 例如:求职中心与求职者例如:求职中心与求职者 观察者模型的定义观察者模型的定义 1、定义对象间的一种、定义对象间的一种一对多一对多的依赖关系,当一个对象的依赖关系,当一个对象的的状态发生变化状态发生变化时,时,所有依赖于它的对象都得到通知并被所有依赖于它的对象都得到通知并被自动更新。自动更新。 2、别名:、别名:依赖(Dependents); 发布-订阅(Publish-Subscribe)。)。 Observer Pattern(Another Name: Dependents, Publish-Subscribe) Define a one-to-many dependency b
3、etween objects so that when one object changes state, all its dependents are notified and updated automatically. 对概念的加深理解对概念的加深理解 观察者模式中有一个观察者模式中有一个“主题主题”对象和若干对象和若干“观察者观察者”对象,对象,主题和观察者之间是一对多的依赖关系。主题和观察者之间是一对多的依赖关系。 当主题的状态发生变化时,所有观察者都得到通知。当主题的状态发生变化时,所有观察者都得到通知。 例如:求职中心为主题,求职者为观察者例如:求职中心为主题,求职者为观察者 观
4、察者模型设计的动机观察者模型设计的动机 1、 将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象的一致性。我们不希望为了维持一致性使各类紧密耦合,因为这样降低了它们的可重用性。 2、观察者模式使得任意数目的观察者不必知道彼此的存在,且主题发生变化时可以得到主题的通知,而同步改变状态。是一种很轻松的耦合。具有很好的可重用性。 设计模型的原则设计模型的原则 1、将不变部分与固定比便的部分相离。 对该原则的理解是:将变化的部分拿来进行封装,以便以后你可以修改它而不会影响那些不变的部分。 这一原则几乎是所有设计模式的基础,所有设计模式都提供一种机制:让系统的某些部分独立于其他部分而
5、发生变化。 2、对接口编程,而不是对实现编程 实现观察者模式的过程:实现观察者模式有很多形式,比较直观的一种是“订阅-通知-撤销订阅”的形式下。 下面我们来详细的描述这一过程: 观察者 观察者(observer)将自己注册到被观察对象(subject)中,被观察对象(目标)将观察者存放在一个容器(container)里。 3、被观察对象 被观察对象发生了某些变化(如,发行方发行新的报纸),从容器中得到所有注册过的观察者,将变化通知观察者 4、撤销观察 观察者告诉被观察者要撤销观察,被观察者从容器中将观察者去除。(观察者将将自己注册到观察者容器时,被观察者不应该过问观察者的具体类型,而是应该使用
6、观察者的接口。这样的优点是:假定程序中还有别的观察者,那么只要这个观察者也是相同的接口实现即可。一个被观察者可以对应多个观察者,当被观察者发生变化的时候,他可以将消息通知所有的观察者。基于接口,而不是具体的实现,这一点位程序提供了更大的灵活性。 观察者模式的结构中的角色观察者模式的结构中的角色 主题(主题(Subject) 观察者(观察者(Observer) 具体主题(具体主题(ConcreteSubject) 具体观察者(具体观察者(ConcreteObserver) 观察者模式里角色的详细解析 1、抽象主题(抽象主题(Subject)角色)角色:主题角色把所有的观察者对象的引用保存在一个列
7、表里;每个主题都可以有任何数量的观察者。主题提供一个接口可以加上或撤销观察者对象;主题角色又叫做抽象被观察者(Observable)角色; 抽象主题角色,有时又叫做抽象被观察者角色,可以用一个抽象类或者一个接口实现;在具体的情况下也不排除使用具体类实现。 2、抽象观察者(、抽象观察者(Observer)角色)角色:为所有的具体观察者定义一个接口,在得到通知时更新自己;抽象观察者角色,可以用一个抽象类或者一个接口实现;在具体的情况下也不排除使用具体类实现。 3、具体主题(、具体主题(ConcreteSubject)角色)角色:保存对具体观察者对象有用的内部状态;在这种内部状态改变时给其观察者发出
8、一个通知;具体主题角色又叫作具体被观察者角色;具体主题角色,通常用一个具体子类实现。 4、具体观察者(、具体观察者(ConcreteObserver)角色)角色:保存一个指向具体主题对象的引用;和一个与主题的状态相符的状态。具体观察者角色实现抽象观察者角色所要求的更新自己的接口,以便使本身的状态与主题的状态自恰。具体观察者角色,通常用一个具体子类实现。 呵呵 观察者模式类图 举例说明模式的结构的描述与使用举例说明模式的结构的描述与使用例:有一个大学毕业生和一个归国留学者都希望能及时知道例:有一个大学毕业生和一个归国留学者都希望能及时知道求职中心最新的职业需求信息。求职中心最新的职业需求信息。
9、1主题主题 : Subject.java public interface Subject /定义接口定义接口 public void addObserver(Observer o); /接口方法接口方法1 public void deleteObserver(Observer o);/接口方法接口方法2 public void notifyObservers( );/接口方法接口方法3 2观察者观察者 : Obsever.java public interface Observer /定义接口观察者定义接口观察者 public void hearTelephone(String heardM
10、ess);/接接口方法口方法 hearTelephone( )用来更新数据用来更新数据3具体主题具体主题 SeekJobCenter.javaimport java.util.ArrayList; public class SeekJobCenter implements Subject /实现接口实现接口 String mess; boolean changed; /定义定义bool型变量型变量 ArrayList personList; /定义数组列表定义数组列表 SeekJobCenter( ) /方法,找工作中心方法,找工作中心 personList=new ArrayList( );
11、/实例一个数组列表实例一个数组列表 mess=“”; /信息初始值为空信息初始值为空 changed=false; public void addObserver(Observer o) if( ! ( personList.contains(o) ) ) /若列表中不包含对象,若列表中不包含对象, personList.add(o); / 则向列表增加该对象则向列表增加该对象 public void deleteObserver(Observer o) if(personList.contains(o) /若列表中包含该对象,若列表中包含该对象,personList.remove(o); /
展开阅读全文