[Java代码] //Subject.java 文件 public interface Subject {public void attach(Observer DocExplorer);public void detach(Observer DocExplorer);void notifyObservers(); } //Observer.java 文件 public interface Observer{void update( (1) ); } //OfficeDoc.java 文件 import java.util.*; public class OfficeDoc implements Subject(//OfficeDoc 类实现 Subject 接口private Vector ObserverVeetor=new java.util.Vector();//存储与OfficeDoc相关联的DocExplorer 对象public void attach(Observer observer){ //将某 DocExplorer 对象与OfficeDoc 相关联 ObserverVector.addElement(observer);}public void detach(Observer observer){ //解除某DocExplorer 对象与OfficeDoc的关联关系 ObserverVector.removeElement(observer);}public void notifyObservers(){//当OfficeDoc对象状态已发生变化时,通知所有的DocExplorer对象Enumeration enumeration= (2) ;while (enumeration.hasMoreElements()){ ((Observer)enumeration.nextElement()). (3) ;}}public Enumeration Observers(){ return ObserverVector.elements();}//其他公文类的属性和方法省略 } //DoeExplorer.java 文件 public class DocExplorer implements (4) {public void update( (5) ){ //更新DocExplorer自身的状态,代码省略} }
参考答案:
解析:(1) Subject subject(注:第二个subject可用其他标识符替换) (2) Observers() (3) update(this) (4) Observer (5) Subject subject(注:第二个subject可用其他标识符替换)
[分析]: 第(1)空处观察者对象更新自身的状态,更新的数据应该来自被观察者对象,所以此处应该为一Subject,因此第(1)空的答案为Subject subject。同样的道理,第(5)空和第(1)空是相同的。 notifyObservers方法通知所有的观察者对象更新自身的状态,所以(2)空处应该返回所有的观察者对象,调用方法Observers()即可获得。第(3)空处对每个观察者对象更新状态,所以应该调用update方法,update方法需要此被观察者对象作为参数,所以使用this来获取对象自身。DocExplorer是一个观察者,因此需要实现接口Observer,第(4)空为Observer。