列表

详情


阅读下列说明和Java代码,将应填入 (n)处的字句写在答题纸的对应栏内.
【说明】
某实验室欲建立一个实验室环境监测系统,能够显示实验室的温度、湿度以及洁净度等环境数据。当获取到最新的环境测量数据时,显示的环境数据能够更新。
现在采用观察者(Observer)模式来开发该系统。观察者模式的类图如图6-1所示。
    

【Java代码】
import java.util.*;
interface Observer {
    public void update(float temp, float humidity, float cleanness);
}
interface Subject {
    public void registerObserver(Observer o); //注册对主题感兴趣的观察者
    public void removeObserver(Observer o);   //删除观察者
    public void notifyObservers();             //当主题发生变化时通知观察者
}
class EnvironmentData implements     (1)     {
    private ArrayList observers;
    private float temperature, humidity, cleanness;
    public EnvironmentData() {   observers = new ArrayList(); }
    public void registerObserver(Observer o) { observers.add(o); }
    public void removeObserver(Observer o)   { /* 代码省略 */ }
    public void notifyObservers() {
        for (int i = 0; i < observers.size(); i++) {
            Observer observer = (Observer)observers.get(i);
               (2)   ;
        }
    }
    public void measurementsChanged() {    (3)   ; }
public void setMeasurements(float temperature, float humidity, float cleanness) {
        this.temperature = temperature;
        this.humidity = humidity;
        this.cleanness = cleanness;
           (4)    ;
    }
}
class CurrentConditionsDisplay implements      (5)      {
    private float temperature;
    private float humidity;
    private float cleanness;
    private Subject envData;
    public CurrentConditionsDisplay(Subject envData) {
        this.envData = envData;
           (6)   ;
}
    public void update(float temperature, float humidity, float cleanness) {
        this.temperature = temperature;
        this.humidity = humidity;
        this.cleanness = cleanness;
        display();
}
    public void display() {/* 代码省略 */ }
}
class EnvironmentMonitor{
    public static void main(String[] args) {
        EnvironmentData envData = new EnvironmentData();
        CurrentConditionsDisplay currentDisplay = new CnrrentConditionsDisplay(envData);
        envData.setMeasurements(80, 65, 30.4f);
    }
}

参考答案:

(1)Subject
(2)observer.update(temperature,humidity,cleanness)
(3)notifyObservers()
(4)measurementsChanged()
(5)Observer
(6)envData.registerObserver(this)

详细解析:

EnvironmentData是环境数据,也就是我们要监测的对象,即主题(Subject),因此(1)处为Subject。
(2)处为通知观察者,因此遍历观察者容器,遍历到一个观察者对象,则更新该观察者的数据,即调用观察者的update()方法。
当环境数据变化时,需要通知观察者,因此(4)处是调用环境变化方法measurementsChanged(),通过此方法通知观察者更新数据,因此(3)处为notifyObservers()。
根据CurrentConditionsDisplay 类中的update()方法可知:CurrentConditionsDisplay 是个观察者,因此(5)处为Observer
(6)是将观察者添加到主题中去。

上一题