我编写了一个程序来学习和使用观察者模式,但是我无法正确打印出数据。它应该打印出粘贴中第7-9行输入的数据,但只打印0,0,0。

主班

public class ObserverPattern {

    public static void main(String[] args) {
        Subject weatherData = new Subject();
        weatherData.setTemp(81);
        weatherData.setHumidity(14);
        weatherData.setWindSpeed(8);

        Observer johnsIpad = new Observer(weatherData);

        weatherData.notifyObserver();

        System.out.println(johnsIpad.toString());
    }

}


学科课

import java.util.ArrayList;

public class Subject {

    // fields
    ArrayList<Observer> observers;
    public double temp;
    public double humidity;
    public double windSpeed;

    // Constructor
    public Subject() {
        observers = new ArrayList<Observer>();
    }

    // Observer pattern methods
    public void register(Observer o) {
        observers.add(o);
    }

    public void unregister(Observer o) {
        observers.remove(observers.indexOf(o));
    }

    public void notifyObserver() {
        for (Observer observer : observers) {
            observer.update(temp, humidity, windSpeed);
        }
    }

    // set weather data
    public void setTemp(double temp) {
        this.temp = temp;
    }

    public void setHumidity(double humidity) {
        this.humidity = humidity;
    }

    public void setWindSpeed(double windSpeed) {
        this.windSpeed = windSpeed;
    }

}


观察员类别

public class Observer {

    double temp;
    double humidity;
    double windSpeed;

    Subject weatherData;

    Observer(Subject weatherDataSource) {
        weatherData = weatherDataSource;
    }

    public void update(double temp, double humidity, double windSpeed) {
        this.temp = temp;
        this.humidity = humidity;
        this.windSpeed = windSpeed;
    }

    public String toString() {
        return temp + "\n" + humidity + "\n" + windSpeed;
    }

}

最佳答案

您从未向该主题注册观察者,因此notifyObserver没有观察者需要通知; for循环主体永远不会执行。

加:

weatherData.register(johnsIpad);


在致电notifyObserver(weatherData)之前。

关于java - 为什么没有收到正确的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38316793/

10-12 00:13
查看更多