您的位置:首页 > 移动开发 > Android开发

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

2015-05-20 16:46 543 查看
写在前面的话:

1,记录学习的过程,希望能够坚持下去。

2,代码Based On Android4.4;主要参考书籍《Head First  设计模式》


什么是观察者模式?

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

怎么设计一个观察者模式的程序?

确定两个核心对象:(《Head First》Chapter 2)

a.主题(Subject.java,WeatherData.java):要实现register()/unregister(),notify()方法

b.观察者(Observer.java,CurrentConditionDisplay.java/StatisticsDisplay.java):要实现update()方法

确定这两个对象之间的关系:

主题对象管理某些数据,一旦数据发生改变,会主动向观察者进行通知,然而观察者不必向主题进行索取。

主题并不知道具体的观察者是谁,这是它们之间的关系。

原则

观察者模式是体现了“针对接口编程,而非针对实现编译”;

所以针对接口编译,我认为是把接口(Subject)或者接口的实现(WeatherData)作为参数,如public CurrentConditionsDisplayer(Subject weatherData)

使用观察者模式的布告板可以动态的添加(register)。

为了交互对象之间的松耦合设计而努力

静态类图



代码实现

在测试类中,实例化一个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模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 android