软件体系结构与设计模式 观察者模式

软件体系结构与设计模式 观察者模式

ID:14461431

大小:141.50 KB

页数:11页

时间:2018-07-28

软件体系结构与设计模式 观察者模式_第1页
软件体系结构与设计模式 观察者模式_第2页
软件体系结构与设计模式 观察者模式_第3页
软件体系结构与设计模式 观察者模式_第4页
软件体系结构与设计模式 观察者模式_第5页
资源描述:

《软件体系结构与设计模式 观察者模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、观察者模式(别名:依赖,发布-订阅)定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。ObserverPattern(AnotherName:Dependents,Publish-Subscribe)Defineaone-to-manydependencybetweenobjectssothatwhenoneobjectchangesstate,allitsdependentsarenotifiedandupdatedautomatically..一、概

2、述在许多设计中,经常涉及到多个对象都对一个特殊对象中的数据变化感兴趣,而且这多个对象都希望跟踪那个特殊对象中的数据变化。二、模式的结构与使用观察者模式的结构中包括四种角色:•主题(Subject)•观察者(Observer)•具体主题(ConcreteSubject)•具体观察者(ConcreteObserver)模式的结构的描述与使用有一个大学毕业生和一个归国留者都希望能及时知道“求职中心”最新的职业需求信息。1.主题:Subject.javapublicinterfaceSubject{publicvo

3、idaddObserver(Observero);publicvoiddeleteObserver(Observero);publicvoidnotifyObservers();}主题接口规定了具体主题需要实现的添加、删除观察者以及通知观察者更新数据的方法2.观察者:Obsever.javapublicinterfaceObserver{publicvoidhearTelephone(StringheardMess);}观察者接口规定了具体观察者用来更新数据的方法。3.具体主题SeekJobCenter.j

4、ava_1publicclassSeekJobCenterimplementsSubject{Stringmess;booleanchanged;ArrayListpersonList;SeekJobCenter(){personList=newArrayList();mess="";changed=false;}publicvoidaddObserver(Observero){if(!(personList.contains(o)))personList.add(o

5、);}publicvoiddeleteObserver(Observero){if(personList.contains(o))personList.remove(o);}3.具体主题SeekJobCenter.java_2publicvoidnotifyObservers(){if(changed){for(inti=0;i

6、anged=false;}}publicvoidgiveNewMess(Stringstr){if(str.equals(mess))changed=false;else{mess=str;changed=true;}}}具体主题通过实现notifyObservers()方法来通知具体观察者,实现的方式是遍历具体主题中用来存放观察者引用的集合,并让集合中的每个具体观察者执行观察者接口规定更新数据的方法。4.具体观察者_1UniversityStudent.javapublicclassUniverStude

7、ntimplementsObserver{Subjectsubject;FilemyFile;UniverStudent(Subjectsubject,StringfileName){this.subject=subject;subject.addObserver(this);myFile=newFile(fileName);}publicvoidhearTelephone(StringheardMess){try{RandomAccessFileout=newRandomAccessFile(myFile

8、,"rw");out.seek(out.length());byte[]b=heardMess.getBytes();out.write(b);System.out.print("我是一个大学生,");System.out.println("我向文件"+myFile.getName()+"写入如下内容:");System.out.println(heardMess);}catch(IOExceptionexp){

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。