//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 ObserverVector=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 notifyObserver(){
//当OfficeDoc对象状态发生变化时,通知所有的DocExplorer对象
Enumeration enumeration= (2)
while(enumeration.hasMoreElements()){
((Observer)enumeration.nextElement()). (3)
}
} public Enumeration Observers(){
return ObserverVector.elements();
}
//其他公文类的属性和方法省略
}
//DocExplorer.java文件
public class DocExplorer implements (4) {
public void update(Subject subject){
//更新DocExplorer自身的状态,代码省略
}
}
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 ObserverVector=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 notifyObserver(){
//当OfficeDoc对象状态发生变化时,通知所有的DocExplorer对象
Enumeration enumeration= (2)
while(enumeration.hasMoreElements()){
((Observer)enumeration.nextElement()). (3)
}
} public Enumeration Observers(){
return ObserverVector.elements();
}
//其他公文类的属性和方法省略
}
//DocExplorer.java文件
public class DocExplorer implements (4) {
public void update(Subject subject){
//更新DocExplorer自身的状态,代码省略
}
}
(2):(new OfferDoc()).Observers()
(3):
(4): Observer
(3): update(this);1和4同1楼
while(enumeration.hasMoreElements()){ //从这里可以知道,(2)要返回Vector对象的元素,即填ObserverVector.elements();
((Observer)enumeration.nextElement()). (3) //从Vector保存的元素是Observer接口实例知道,此处应该调用Observer的接口方法,即update,而从(1)可以知道,update的参数是Subject对象,所以参数用this就可以指定是当前Subject对象实例所以得出结果
(1) Subject subject
(2) ObserverVector.elements();
(3) update(this)
(4) Observer