软件体系结构与设计模式 第六章 观察者模式.ppt
《软件体系结构与设计模式 第六章 观察者模式.ppt》由会员分享,可在线阅读,更多相关《软件体系结构与设计模式 第六章 观察者模式.ppt(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章 观察者模式观察者模式 1/6/20231观察者模式(别名:依赖,发布观察者模式(别名:依赖,发布-订阅)订阅)定定义义对对象象间间的的一一种种一一对对多多的的依依赖赖关关系系,当当一一个个对对象象的的状状态态发发生生变变化化时时,所所有有依依赖赖于于它它的的对对象象都都得得到到通通知知并并被被自动更新。自动更新。Observer Pattern(Another Name:Dependents,Publish-Subscribe)Define a one-to-many dependency between objects so that when one object chang
2、es state,all its dependents are notified and updated automatically.一一、概述概述 1/6/20232 在许多设计中,经常涉及到多个对象在许多设计中,经常涉及到多个对象都对一个特殊对象中的数据变化感兴趣,都对一个特殊对象中的数据变化感兴趣,而且这多个对象都希望跟踪那个特殊对而且这多个对象都希望跟踪那个特殊对象中的数据变化。象中的数据变化。二、二、模式的结构与使用模式的结构与使用 1/6/20233观察者模式的结构中包括四种角色:观察者模式的结构中包括四种角色:主题(主题(SubjectSubject)观察者(观察者(Observ
3、erObserver)具体主题(具体主题(ConcreteSubjectConcreteSubject)具体观察者(具体观察者(ConcreteObserverConcreteObserver)1/6/20234模式的模式的UMLUML类图类图 模式的结构的描述与使用模式的结构的描述与使用有一个大学毕业生和一个归国留者都希望能及时知道“求职中心”最新的职业需求信息。1/6/202361 1主题主题 :Subject.java Subject.java public interface Subject public interface Subject public void public voi
4、d addObserver(ObserveraddObserver(Observer o);o);public void public void deleteObserver(ObserverdeleteObserver(Observer o);o);public void public void notifyObserversnotifyObservers();();主题接口规定了具体主题需要实现的添加、删除观察者以及通知观察者更新数据的方法。1/6/202372 2观察者观察者 :Obsever.javaObsever.java public interface Observerpubli
5、c interface Observer public void public void hearTelephone(StringhearTelephone(String heardMessheardMess););观察者接口规定了具体观察者用来更新数据的方法。1/6/202383 3具体主题具体主题 SeekJobCenter.java_1 SeekJobCenter.java_1 public class public class SeekJobCenterSeekJobCenter implements Subject implements Subject String mess;Str
6、ing mess;booleanboolean changed;changed;ArrayListArrayList personListpersonList;SeekJobCenterSeekJobCenter()()personListpersonList=new=new ArrayListArrayList();();mess=;mess=;changed=false;changed=false;public void public void addObserver(ObserveraddObserver(Observer o)o)if(!(personList.contains(oif
7、(!(personList.contains(o)personList.add(opersonList.add(o););public void public void deleteObserver(ObserverdeleteObserver(Observer o)o)if(personList.contains(oif(personList.contains(o)personList.remove(opersonList.remove(o););1/6/202393 3具体主题具体主题 SeekJobCenter.java_2 SeekJobCenter.java_2 public voi
8、d public void notifyObserversnotifyObservers()()if(changedif(changed)for(intfor(int i=0;i i=0;ipersonList.size();ipersonList.size();i+)+)Observer observer=Observer observer=personList.get(ipersonList.get(i););observer.hearTelephone(messobserver.hearTelephone(mess););changed=false;changed=false;publi
9、c void public void giveNewMess(StringgiveNewMess(String strstr)if(str.equals(messif(str.equals(mess)changed=false;changed=false;else else mess=mess=strstr;changed=true;changed=true;具体主题通过实现具体主题通过实现notifyObservers()方法来通知具体观察方法来通知具体观察者,实现的方式是遍历具体主题中用来存放观察者引用的者,实现的方式是遍历具体主题中用来存放观察者引用的集合,并让集合中的每个具体观察者执行
10、观察者接口规定集合,并让集合中的每个具体观察者执行观察者接口规定更新数据的方法。更新数据的方法。1/6/2023114 4具体观察者具体观察者_1 _1 UniversityStudent.javaUniversityStudent.javapublic class public class UniverStudentUniverStudent implements Observer implements Observer Subject subject;Subject subject;File File myFilemyFile;UniverStudent(SubjectUniverStud
11、ent(Subject subject,String subject,String fileNamefileName)this.subject=subject;this.subject=subject;subject.addObserver(thissubject.addObserver(this););myFilemyFile=new=new File(fileNameFile(fileName););public void public void hearTelephone(StringhearTelephone(String heardMessheardMess)try try Rand
12、omAccessFileRandomAccessFile out=new out=new RandomAccessFile(myFile,rwRandomAccessFile(myFile,rw););out.seek(out.length();out.seek(out.length();byte b=byte b=heardMess.getBytesheardMess.getBytes();();out.write(b);out.write(b);System.out.printSystem.out.print(我是一个大学生我是一个大学生,);,);System.out.printlnSy
13、stem.out.println(我我向向文文件件+myFile.getNamemyFile.getName()+()+写写入入如如下内容下内容:);:);System.out.println(heardMessSystem.out.println(heardMess););catch(IOExceptioncatch(IOException exp)System.out.println(exp.toStringexp)System.out.println(exp.toString();();1/6/2023124 4具体观察者具体观察者_2 _2 HaiGui.javaHaiGui.java
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件体系结构与设计模式 第六章 观察者模式 软件 体系结构 设计 模式 第六 观察者
限制150内