设计模式In Android——观察者(Observer)模式_1

写在前面的话:
1,记录学习的过程,希望能够坚持下去。
2,代码Based On Android4.4;主要参考书籍《Head First 设计模式》

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

  2. 怎么设计一个观察者模式的程序?
    确定两个核心对象:(《Head First》Chapter 2)
    a.主题(Subject.java,WeatherData.java):要实现register()/unregister(),notify()方法
    b.观察者(Observer.java,CurrentConditionDisplay.java/StatisticsDisplay.java):要实现update()方法

  3. 确定这两个对象之间的关系:
    主题对象管理某些数据,一旦数据发生改变,会主动向观察者进行通知,然而观察者不必向主题进行索取。
    主题并不知道具体的观察者是谁,这是它们之间的关系。

  4. 原则

    • 观察者模式是体现了“针对接口编程,而非针对实现编译”;
      所以针对接口编译,我认为是把接口(Subject)或者接口的实现(WeatherData)作为参数,如public CurrentConditionsDisplayer(Subject weatherData)
    • 使用观察者模式的布告板可以动态的添加(register)。
    • 为了交互对象之间的松耦合设计而努力
  5. 静态类图
    第二章实例类图

  6. 代码实现
    在测试类中,实例化一个WeatherData

        WeatherData wd = new WeatherData();
        CurrentConditionsDisplayer ccd =  new CurrentConditionsDisplayer(wd);
        wd.setMeasurementChanged(28, 90, 134.0f);

在CurrentConditionsDisplayer的构造方法中,会调用WeatcherData.registerObserver方法,把已经注册进去。
在WeatherData.java实现registerObserver方法,就是把

    @Override
    public void registerObserver(Observer o) {
        // TODO Auto-generated method stub
        observers.add(o);
    }

在进行数据传递的方法notify()方法中,会遍历ArraryList逐个调用update()方法通知。
WeatherData.java

    @Override
    public void notifyObserver() {
        // TODO Auto-generated method stub
        for(int i=0; i<observers.size(); i++){
            Observer _o = (Observer)observers.get(i);
            _o.update(temperature, humidity, pressure);
        }
    }

CurrentConditionsDisplayer.java中去显示

    @Override
    public void update(float temp, float humiditiy, float pressure) {
        // TODO Auto-generated method stub
        this.temp = temp;
        this.humidity = humiditiy;
        this.pressure = pressure;

        displayer();
    }

代码下载:代码

下节学习一下在Android里面,哪里使用Observer模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可夫小子

感谢大佬!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值