首页 > 其他 > 详细

Observer Pattern

时间:2020-06-28 21:12:51      阅读:54      评论:0      收藏:0      [点我收藏+]

问题

技术分享图片


技术分享图片

Theory

技术分享图片


技术分享图片


// Observer.java

public interface Observer {
    void update(float temperature, float pressure, float humidity);

}
//Subject.java
public interface Subject {
    void registerObserver(Observer o);
    void removeObserver(Observer o);
    void notifyObservers();
}
// WeatherData.java
import java.util.ArrayList;

public class WeatherData implements Subject{
    private float temperature;
    private float pressure;
    private float humidity;
//    private CurrentConditions currentConditions;
    private ArrayList<Observer> observers;
    public WeatherData(){
        observers = new ArrayList<Observer>();
    }

    public void dataChange(){
        notifyObservers();
    }

    public void setData(float temperature, float pressure, float humidity){
        this.temperature = temperature;
        this.pressure = pressure;
        this.humidity = humidity;
        dataChange();
    }

    public float getTemperature() {
        return temperature;
    }

    public float getPressure() {
        return pressure;
    }

    public float getHumidity() {
        return humidity;
    }

    public void registerObserver(Observer o) {
        observers.add(o);
    }

    public void removeObserver(Observer o) {
        if(observers.contains(o)){
            observers.remove(o);
        }
    }

    public void notifyObservers() {
        for(Observer ob: observers){
            ob.update(this.temperature, this.pressure, this.humidity);
        }
    }
}
// CurrentConditions.java
public class CurrentConditions implements Observer {
    private float temperature;
    private float pressure;
    private float humidity;

    public void update(float temperature, float pressure, float humidity){
        this.temperature = temperature;
        this.pressure = pressure;
        this.humidity = humidity;
        display();
    }
    public void display(){
        System.out.println("Temperature Right Now : " + temperature);
        System.out.println("Pressure Right Now : " + pressure);
        System.out.println("Humidity Right Now : " + humidity);
    }

}
// Google.java
public class Google implements Observer {
    private float temperature;
    private float pressure;
    private float humidity;

    public void update(float temperature, float pressure, float humidity){
        this.temperature = temperature;
        this.pressure = pressure;
        this.humidity = humidity;
        display();
    }
    public void display(){
        System.out.println("Google Temperature Right Now : " + temperature);
        System.out.println("Google Pressure Right Now : " + pressure);
        System.out.println("Google Humidity Right Now : " + humidity);
    }
}
// Client.java
public class Client {
    public static void main(String[] args) {
        WeatherData weatherData = new WeatherData();

        CurrentConditions currentConditions = new CurrentConditions();
        Google google = new Google();

        weatherData.registerObserver(currentConditions);
        weatherData.registerObserver(google);
        System.out.println("Notify the observers.");
        weatherData.setData(10f, 100f, 30.8f);

    }
}

Observer Pattern

原文:https://www.cnblogs.com/nedrain/p/13204924.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!