某文件管理系统中定义了类OfficeDoe和DocExplorer。当类OfficeDoe发生变化时,类DocExplorer的所有对象都要更新其自身的状态。现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。

图6-1
【Java代码】



正确答案及解析
正确答案
解析
(1)void update();
(2)Observer;
(3)obs.update();
(4)Subject;
(5)Attach(this);
本题是对观察者模式的考查,观察者模式的意图是:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
本题根据Observer接口的实现类DocExplorer,实现类包括同名构造函数和update()方法,所以接口Observer缺失的是update()方法,并且没有方法体,(1)空填写void update()。
第2空是myObs表单类型的缺失,根据代码上下文,在构造函数中,根据this.myObs=new ArrayList<Observer>(),可以知道myObs是Observer表单,第(2)空填写Observer。
第3空是Notify()方法体的缺失,根据代码上下文,Notify传入了一个参数Observer obs,又根据代码上下文可知Observer只有一个update()方法,此时方法体调用的应该是update()方法,调用方法的对应是传入的obs,第(3)空填写obs.update()。
第4空、第5空缺失的是DocExplorer类的同名构造函数传入的参数类型以及构造方法体,这里结合根据观察者模式填空,对于实际观察者类,需要与被观察者联系起来,所以这里是与被观察者Subject联系,也就是调用Subject中的Attach()添加观察者列表。因此第(4)空需要填写参数类型Subject,形参名sub已经给出了提示;sub调用增加观察者方法,将当前观察者添加到对应列表,即第(5)空填写Attach(this)。
包含此试题的试卷
你可能感兴趣的试题

-
- A.V(S2)和P(S4)
- B.P(S2)和V(S4)
- C.P(S2)和P(S4)
- D.V(S2)和V(S4)
- 查看答案

-
- A.V(S1)P(S2)和V(S3)
- B.P(S1)V(S2)和V(S3)
- C.V(S1)V(S2)和V(S3)
- D.P(S1)P(S2)和V(S3)
- 查看答案

-
- A.P(S4)和V(S4)V(S5)
- B.V(S5)和P(S4)P(S5)
- C.V(S3)和V(S4)V(S5)
- D.P(S3)和P(S4)V(P5)
- 查看答案

-
- A.P(S3)和V(S4)V(S5)
- B.V(S3)和P(S4)P(S5)
- C.P(S3)和P(S4)P(S5)
- D.V(S3)和V(S4)V(S5)
- 查看答案

-
- A.P(S2)和P(S4)
- B.P(S2)和V(S4)
- C.V(S2)和P(S4)
- D.V(S2)和V(S4)
- 查看答案