主体接口-》主体实现

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

地址:

主体接口:

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);



    }

}

优质内容筛选与推荐>>
1、python执行时遇到的坑
2、MongoDB可视化工具RoboMongo----Windows安装
3、(转)邮差与邮局 (网络协议概观)
4、cookie 和 session 的异同
5、接口是啥


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn