博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式案例用Java内置对象实现
阅读量:4228 次
发布时间:2019-05-26

本文共 1940 字,大约阅读时间需要 6 分钟。

具体思路参考上一篇博客

import java.util.Observable;

//继承observable,查看源码可以发现,observable已经把注册,添加,删除都做好了,
//我们不在需要做
public class WeatherData extends Observable{
    private float temperature;
    private float humidity;
    private float pressure;
    public WeatherData(){
        
    }
    //主题值改变时调用
    public void measurementsChanged(){
        setChanged();//设置当前改变量为true ,这样才可以进行
        notifyObservers();
        //源码:((Observer)arrLocal[i]).update(this, arg);表示向观察者穿值
    }
    //和原来的一样,改变主题的值,引起观察者收到信息
    public void setMeasurements(float temperature,float humidity,float pressure){
        this.temperature=temperature;
        this.humidity=humidity;
        this.pressure=pressure;
        measurementsChanged();
    }
    public float getTemperature() {
        return temperature;
    }
    public float getHumidity() {
        return humidity;
    }
    public float getPressure() {
        return pressure;
    }
    
}
public class CurrentConditionsDisplay implements Observer,DisplayElement{
    Observable observable;
    private float temperature;
    private float humidity;
    //传入主题引用,为了把当前观察者放入主题的list中
    public CurrentConditionsDisplay(Observable observable){
        this.observable=observable;
        observable.addObserver(this);
    }
    //更新后执行,显示,供用户观看
    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("Current conditions: "+temperature
                +"F degrees and "+humidity+"% humidity");
    }
    //这个函数供主题调用
    @Override
    public void update(Observable o, Object arg) {
        // TODO Auto-generated method stub
        if(o instanceof WeatherData){
            WeatherData weatherData=(WeatherData)o;
            this.temperature=weatherData.getTemperature();
            this.humidity=weatherData.getHumidity();
            display();
        }
    }
}
测试:

public static void main(String[] args) {

        // TODO Auto-generated method stub
        WeatherData weatherData=new WeatherData();
        CurrentConditionsDisplay currentDisplay=
                new CurrentConditionsDisplay(weatherData);
        CurrentConditionsDisplay currentDisplay1=
                new CurrentConditionsDisplay(weatherData);
        weatherData.setMeasurements(80, 65,30.5f);
        weatherData.setMeasurements(82, 70,29.2f);
        weatherData.setMeasurements(78, 90,29.2f);

转载地址:http://lvjqi.baihongyu.com/

你可能感兴趣的文章
tomcat群集中session共享的几个方案
查看>>
查找google谷歌北京IP地址的方法
查看>>
本科大数据专业该怎么上?
查看>>
云创大数据1+X大数据应用部署与调优职业技能等级证书预申报正式开启!
查看>>
人工智能需要一个可被证明的理论作为基础 | 哈佛丘成桐
查看>>
入门 | 一文概览深度学习中的激活函数
查看>>
一分钟整明白Tensorflow Extended
查看>>
人工智能再次参加高考:和作家比写作文,AI能打多少分?
查看>>
云创冬日紫金山踏雪游记
查看>>
西安思源学院电子信息工程学院院长张卫钢一行到访
查看>>
邀请函|欢迎参加2019云创大数据实验平台金融类/电子商务类/数学统计类院校各省总代理招募大会!...
查看>>
云创大数据的2018年!
查看>>
QNX简介
查看>>
MQTT协议基本介绍
查看>>
进程和线程是操作系统基本概念,了解一下
查看>>
SSL与TLS的区别以及介绍
查看>>
对象切割 - 常量引用传递
查看>>
北邮同学面经
查看>>
Effective C++条款16:成对使用new和delete时要采取相同形式
查看>>
sizeof与strlen
查看>>