码迷,mamicode.com
首页 > 其他好文 > 详细

观察者模式

时间:2018-01-16 00:38:52      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:rda   void   函数   override   java.awt   pack   package   list   print   

主体接口-》主体实现

观察者接口-》观察者实现

地址:

主体接口:

package Observer;

/*
 * Create by dapeng on 2018/1/15
 */
public interface Subject {
    //观察者注册
    void registeObserver(Observer observer);

    //移除观察者
    void removeObserver(Observer observer);

    //通知观察者
    void notifyObserver();
}
 

主体实现:

package Observer;

import java.awt.geom.FlatteningPathIterator;
import java.util.ArrayList;
import java.util.List;

/*
 * Create by dapeng on 2018/1/15
 */
public class WeatherDataSubject implements  Subject {
    private List<Observer> observers;

    private float temperature;//温度
    private float humidity;//湿度
    private float pressure;//气压
    private List<Float> forecastTemperatures;//未来几天的温度

    public WeatherDataSubject(){
        this.observers = new ArrayList<Observer>();
    }

    @Override
    public void registeObserver(Observer observer) {
        this.observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        this.observers.remove(observer);
    }

    @Override
    public void notifyObserver() {
        for(Observer observer:observers){
            observer.update();
        }
    }
    public void measurementChanged(){
        notifyObserver();
    }
    public void setWeather(float temperature,float humidity,float pressure,List<Float> forecastTemperatures){
        this.temperature = temperature;
        this.humidity = humidity;
        this.pressure = pressure;
        this.forecastTemperatures = forecastTemperatures;
        //改变后的反应
        measurementChanged();
    }
    public float getTemperature() {
        return temperature;
    }

    public float getHumidity() {
        return humidity;
    }

    public float getPressure() {
        return pressure;
    }

    public List<Float> getForecastTemperatures() {
        return forecastTemperatures;
    }
}

观察者接口:

public interface Observer {
    void update();
}

功能接口:

public interface DisplayElement {
    void display();
}

 

观察者1:

package Observer;

/*
 * Create by dapeng on 2018/1/15
 */
public class CurrentConditionDisplay implements Observer ,DisplayElement {
    //观察这个天气的变化
    private WeatherDataSubject weatherDataSubject;

    private float temperature;
    private float humidity;
    private float pressure;

    public  CurrentConditionDisplay(WeatherDataSubject weatherDataSubject){
        this.weatherDataSubject = weatherDataSubject;
        this.weatherDataSubject.registeObserver(this);
    }
    @Override
    public void display() {
        System.out.println("当前温度为:" + this.temperature + "℃");
        System.out.println("当前湿度为:" + this.humidity);
        System.out.println("当前气压为:" + this.pressure);
    }

    @Override
    public void update() {
        this.temperature = this.weatherDataSubject.getTemperature();
        this.humidity = this.weatherDataSubject.getHumidity();
        this.pressure = this.weatherDataSubject.getPressure();
        display();
    }
}

观察者2:

package Observer;

import java.util.List;

/*
 * Create by dapeng on 2018/1/15
 */
public class ForecastDisplay implements Observer , DisplayElement{
    private WeatherDataSubject weatherDataSubject;
    private List<Float> forecastTemperatures;

    public ForecastDisplay(WeatherDataSubject weatherDataSubject){
        this.weatherDataSubject = weatherDataSubject;
        weatherDataSubject.registeObserver(this);
    }


    @Override
    public void update() {
        this.forecastTemperatures = this.weatherDataSubject.getForecastTemperatures();
        display();
    }

    @Override
    public void display() {
        int count = 0;
        System.out.print("未来几天的天气 ");
        for(Float f:forecastTemperatures){
            System.out.println("第"+ ++count +"天的温度是"+f);
        }
    }
}

主函数:

package Observer;

import java.util.ArrayList;
import java.util.List;

/*
 * Create by dapeng on 2018/1/15
 */
public class Main {
    public static void main(String [] arg){
     WeatherDataSubject weatherDataSubject = new WeatherDataSubject();
     CurrentConditionDisplay currentConditionDisplay = new CurrentConditionDisplay(weatherDataSubject);
    ForecastDisplay forecastDisplay = new ForecastDisplay(weatherDataSubject);

    List<Float> f = new ArrayList<Float>();
    f.add(30.2f);
    f.add(30f);
    f.add(49f);
    weatherDataSubject.setWeather(22,3,500,f);



    }

}

 

观察者模式

标签:rda   void   函数   override   java.awt   pack   package   list   print   

原文地址:https://www.cnblogs.com/da-peng/p/8290214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!