2021下半年案例6
阅读下列说明和Java代码,将应填入(n)处的字句写在题纸的对应栏内。
【说明】某文件管理系统中定义了OfficeDoe和DocExplorer。当类OfficeDoe发生变化时,类DocExplorer的所有对象都要更新其自身的状态。现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。
import java.util.*;
interface Observer {
//public (1);
public void update();
}
interface Subject {
public void Attach(Observer obs);
public void Detach(Observer obs);
public void Notify();
public void setStatus(int status);
public int getStatus();
}
class OfficeDoc implements Subject {
//private List < (2) > myObs;
private List < Observer > myObs;
private String mySubjectName;
private int m_status;
public OfficeDoc(String name) {
mySubjectName = name;
this.myObs = new Arraylist<Observer>();
m_status = 0;
}
public void Attach(Observer obs) {
this.myObs.add(obs);
}
public void Detach(Observer obs) {
this.myObs.remove(obs);
}
public void Notify(){
for(Observer obs; this.myObs) {
//(3);×
//this.myObs.edit(obs);
obs.update();
}
}
public void setStatus(int status;) {
m_status = status;
System out.println("SetStatus Subject[" + mySubjectName + "]status:" + status);
}
public int getStatus() {
return m_status;
}
}
class DocExplorer implements Observer {
private String myObsName;
//public DocExplorer(String name, (4) sub) {
public DocExplorer(String name, Subject sub) {
myObsName = name;
//sub.(5)
//×sub.update(myObsName);
sub.Attach(this);
}
public void update() {
System.out.println("update observer[" + myObsName + "]");
}
}
class ObserverTest {
public static void main(String []args) {
System.out.println("Hello World!");
Subject subjectA=new OfficeDoc("subjectA");
Observer observerA = new DocExplorer("observerA", subjectA);
subjectA.serStatus(1);
subjectA.Notify();
}
}