阅读以下说明和Java代码,将应填入(n)处。 [说明] 在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplo

admin2008-01-15  39

问题 阅读以下说明和Java代码,将应填入(n)处。
[说明]
   在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。一个OfficeDoc对象能够关联一组 DocExplorer对象。当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的 DocExplorer对象都将得到通知,这种应用被称为观察者模式。以下代码采用Java语言实现,能够正确编译通过。
[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。
转载请注明原文地址:https://jikaoti.com/ti/8hi7FFFM
0

相关试题推荐
最新回复(0)