博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-观察者模式
阅读量:5876 次
发布时间:2019-06-19

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

观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。

类图:

 

 

设计气象站:

 

 

代码:

三个接口:Subject、Observer、DisplayElement

/**

* Created by zyzhmily on 2018/5/20.

* 主题

*/

public interface Subject {

    public void registerObserver(Observer observer);

    public void removeObserver(Observer observer);

    public void notifyObserver();

}

/**

* Created by zyzhmily on 2018/5/20.

*/

public interface Observer {

    public  void update(float temperature,float humidity,float pressure);

}

/**

* Created by zyzhmily on 2018/5/20.

*/

public interface DisplayElement {

    public void display();

}

WeatherData:

/**

* Created by zyzhmily on 2018/5/20.

*/

public class WeatherData implements Subject {

    private ArrayList observers;

    private float temperature;

    private float humidity;

    private float pressure;

    public WeatherData(){

        observers=new ArrayList();

    }

    @Override

    public void registerObserver(Observer observer) {

        observers.add(observer);

    }

    @Override

    public void removeObserver(Observer observer) {

        int i=observers.indexOf(observer);

        if (i>=0){

            observers.remove(i);

        }

    }

    @Override

    public void notifyObserver() {

        for (int i=0;i

            Observer observer= (Observer) observers.get(i);

            observer.update(temperature,humidity,pressure);

        }

    }

    public void measurementschanged(){

        notifyObserver();

    }

    public void setMeasurements(float temperature,float humidity,float pressure){

        this.temperature=temperature;

        this.humidity=humidity;

        this.pressure=pressure;

        measurementschanged();

    }

}

CurrentConditionsDisplay:

/**

* Created by zyzhmily on 2018/5/20.

*/

public class CurrentConditionsDisplay implements Observer,DisplayElement{

    private float temperature;

    private float humidity;

    private Subject weatherData;

    public CurrentConditionsDisplay(Subject subject) {

        this.weatherData=subject;

        weatherData.registerObserver(this);

    }

    @Override

    public void update(float temperature, float humidity, float pressure) {

        this.temperature=temperature;

        this.humidity=humidity;

        display();

    }

    @Override

    public void display() {

        System.out.println("Current conditions: "+temperature+" F degree and "+humidity+" % humidity");

    }

}

测试类:

/**

* Created by zyzhmily on 2018/5/19.

*/

public class PatternObserver {

    public static void main(String[] args){

          WeatherData weatherData=new WeatherData();

          CurrentConditionsDisplay currentConditionsDisplay=new CurrentConditionsDisplay(weatherData);

          weatherData.setMeasurements(80,65,30.4f);

    }

}

本文来自 《Head First 设计模式》

转载于:https://www.cnblogs.com/hmily555/p/9062898.html

你可能感兴趣的文章
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
MacBook如何用Parallels Desktop安装windows7/8
查看>>
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
七天学会ASP.NET MVC (四)——用户授权认证问题
查看>>
upgrade to iOS7,how to remove stroyboard?
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
zabbix监控部署
查看>>
struts中的xwork源码下载地址
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
CDays–4 习题一至四及相关内容解析。
查看>>
L3.十一.匿名函数和map方法
查看>>
java面向对象高级分层实例_实体类
查看>>
android aapt 用法 -- ApkReader
查看>>
[翻译]用 Puppet 搭建易管理的服务器基础架构(3)
查看>>
Android -- AudioPlayer
查看>>
Python大数据依赖包安装
查看>>
Android View.onMeasure方法的理解
查看>>