设计模式学习--观察者模式(observer)
来源:互联网 发布:java反序列化漏洞利用 编辑:程序博客网 时间:2024/05/23 02:10
模式意图
1 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
代码
public static void main(String[] args){WeatherData weatherData = new WeatherDate(); //主题// 新建两个观察者// 观察者构造方法中 对观察者进行注册Observer1 ob1 = new Observer1(weatherData);Observer2 ob2 = new Observer2(weatherData);// 更新气象数据时,所有观察者都将会被通知weatherData.setMeasurements(80,65,30);weatherData.setMeasurements(90,70,35);}WeatherData:具体主题public class WeatherData implements Subject{// 设置温度public void setMeasurements(float temperature,float humidity ,float pressure){this.temperature = temperature;this.humidity = humidity;this.pressure = pressure;// 通知所有观察者notifyObservers();}// 通知所有观察者public void notifyObservers(){for(){Observer observer = (Observer)observer.get(i);observer.update( temperature, humidity , pressure);}}}Observer1:具体观察者public class Observer1 implements Observer{// 注册观察者public Observer1(Subject weatherData){weatherData.registerObserver(this);}// 实现观察者接口的update()方法public void update(float temperature,float humidity ,float pressure){// 实现业务方法display( temperature, humidity , pressure)}}
问题:
1 具体观察者一定要依赖主题吗?
不需要,subject注册观察者的代码可以移出Observer1,放到其它地方执行,从而去除观察者对主题的关系。
备注:《敏捷软件开发》P272中 图24.11的类图更是把主题和主题数据进行分离,理解起来更为清晰。
1.观察者关注只需要主题的数据,而非主题的业务对象。
推拉模式区别:
区别在于Observer接口参数
推:Observer接口参数为需要更新各个属性,拿气象数据例子来说参数可以使温度、湿度、压力等。
拉:Observer接口参数为主题对象(数据对象)即实现了Subject的实现类 WeatherData。
所以推荐在参数较少的情况下使用拉模式更加方便,但是当主题对象非常复杂参数很多,这样使用拉模式观察者获取数据时就更容易出错。
要点:
1、观察者模式定义了对象之间一对多的关系
2、主题用一个共同的接口来更新观察者
3、观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口
4、使用此模式时,你可从被观察者处推或拉数据
5、有多个观察者时,不可以依赖特定的通知次序
问题:
1 具体
- 设计模式学习--观察者模式(observer)
- 设计模式--观察者(Observer)
- 设计模式-观察者(Observer)
- 观察者设计模式(Observer)
- Observer(观察者)设计模式
- 设计模式学习--观察者模式(Observer Pattern)
- 设计模式学习-Observer观察者模式
- 设计模式学习笔记--观察者(Observer)模式
- 设计模式学习笔记十九(Observer观察者模式)
- 设计模式学习9 -- 观察者模式(Observer)
- 【设计模式】学习笔记2:观察者模式(Observer)
- 设计模式学习(二)-- 观察者模式 Observer Pattern
- 设计模式学习笔记-观察者模式(Observer)
- 设计模式C++学习笔记之一(Observer观察者模式)
- 设计模式学习总结:观察者模式(Observer Pattern)
- 观察者设计模式Observer
- 观察者设计模式(observer)
- observer(观察者设计模式)
- 对互联网海量数据实时计算的理解 ——摘抄自http://tech.ddvip.com/2011-10/1319783898169602.html
- 浅谈伪原创为SEO创造内容
- 网站推广不只是seo一种方法
- 关于进程
- ExecuteReader报错,语法错误
- 设计模式学习--观察者模式(observer)
- poj 3352 Road Construction 边双连通缩点
- 对于百度的看法
- hdu 4620 Fruit Ninja Extreme
- OK6410 DNW usb无法连接的问题
- json和jsonp
- 京东有些贵
- jQuery 写的简单打字游戏
- c++中double转换成string型(浮点数的格式化)(转)