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

  • 15
  • 0
  • 约1.81万字
  • 约 11页
  • 2016-10-06 发布于贵州
  • 举报
软件体系结构与计模式 观察者模式

观察者模式(别名:依赖,发布-订阅) 定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。 Observer Pattern(Another Name: Dependents, Publish-Subscribe) Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.. 一、概述 在许多设计中,经常涉及到多个对象都对一个特殊对象中的数据变化感兴趣,而且这多个对象都希望跟踪那个特殊对象中的数据变化。 二、 模式的结构与使用 观察者模式的结构中包括四种角色: 主题(Subject) 观察者(Observer) 具体主题(ConcreteSubject) 具体观察者(ConcreteObserver) 模式的结构的描述与使用 有一个大学毕业生和一个归国留者都希望能及时知道“求职中心”最新的职业需求信息。 1.主题 : Subject.java public interface Subject{ public void addObserver(Observer o); public void deleteObserver(Observer o); public void notifyObservers(); } 主题接口规定了具体主题需要实现的添加、删除观察者以及通知观察者更新数据的方法 2.观察者 : Obsever.java public interface Observer{ public void hearTelephone(String heardMess); } 观察者接口规定了具体观察者用来更新数据的方法。 3.具体主题 SeekJobCenter.java_1 public class SeekJobCenter implements Subject{ String mess; boolean changed; ArrayListObserver personList; SeekJobCenter(){ personList=new ArrayListObserver(); 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); } 3.具体主题 SeekJobCenter.java_2 public void notifyObservers(){ if(changed){ for(int i=0;ipersonList.size();i++){ Observer observer=personList.get(i); observer.hearTelephone(mess); } changed=false; } } public void giveNewMess(String str){ if(str.equals(mess)) changed=false; else{ mess=str; changed=true; } } } 具体主题通过实现notifyObservers()方法来通知具体观察者,实现的方式是遍历具体主题中用来存放观察者引用的集合,并让集合中的每个具体观察者执行观察者接口规定更新数据的方法。 4.具体观察者_1 UniversityStudent.java public class UniverStudent implements Observer{ Subject subject; File myFile; Univer

文档评论(0)

1亿VIP精品文档

相关文档