设计模式——观察者模式
来源:互联网 发布:淘宝充值可以代付吗 编辑:程序博客网 时间:2024/06/06 23:52
一、定义
一种一对多的依赖关系,让多个观察者对想同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察这对象,是它们能够自动更新自己。
二、例子。
气象台对天气实时监控,只要天气的温度湿度等等一有变化就公告栏就更新数据。
UML图:
代码:
天气变化接口:
public interface Subject(){public void registerObserver(Observer o);//添加公告栏public void removeObserver(Observer o);//取消公告栏public void notifyObservers();//通知公告栏更新}
天气变化数据改变实现:
public class WeatherData implements Subject{private ArrayList observers;private float temperature;private float humidity;private float pressure;//公告栏的模版public WeatherData(){observers= new ArrayList();} //添加公告栏public void registerOvserver(Observer o ){observers.add(o);}//移除公告栏public void removeObserver(Observer o){int i=observers.indexOf(o);if(i>=0){observers.remove(i);}}//通知公告栏更新的信息public notifyObservers(){for(int i=0;i<observers.size();i++){Observer observer=(Observer)observer.get(i);observer.update(temperature,humidity,pressure);}} //公告栏更新public void measurementsChanged(){notifyObservers();}//获得信息public void setMeasurements(float temperature,float humidity,float pressure){this.temperature=temperature;this.humidity=humidity;this.pressure=pressure;measurementsChanged();}}
公告栏更新接口:
public interface Observer(){public void update(float temp,float humidity,float pressure);}
公告栏显示接口:
public interface DisplayElement(){public void display();}
公告栏:
public class CurrentConditionsDisplay implements Observer,DisplayElements{private float temperature;private float humidity;private Subject weatherData;//公告栏构造函数public CurrentConditionsDisplay(Subject weatherData){this.weatherData=weatherData;weatherData.registerOvserver(this);}//公告栏更新数据public void update(float temperature,float humidity,float,float pressure){this.temperature=temperature;this.humidity=humidity;display();}public void display(){System.out.println("Current conditions:"+ temperature+"F degress and "+humidity+"% humidity");}}
客户端:
public class WeatherStation{public static void main(String[] args){WeatherData wetherData=new WeaterData();CurrentConditionsDisplay currentDisplay(weaterData);weaterData.setMeasurements(80,65,30.4f);}}
综述:
观察者模式让双方都依赖于接口(或抽象),而不是依赖与具体,从而是的各自的变化都不会影响另一边的变化。公告板样式,显示数据的变化不会影响天气数据的变化。
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者
- 设计模式——观察者设计模式
- 设计模式——观察者
- 设计模式——观察者
- 设计模式 —— 观察者
- 设计模式——观察者
- 【设计模式】——观察者
- 设计模式——观察者模式
- 每日设计模式——观察者模式
- Unix下的守护进程
- 涉及sdu数据同步的代码
- 中文编码方式总结
- 最长重复子串
- linux 环境变量 路径
- 设计模式——观察者模式
- J2EE (一) 轻松入门
- jsp九大隐式对象——out隐式对象
- 支持中文的zip压缩和解压,修改自带jdk ZipInputStream、ZipOutputStream、ZipEntry代码
- 让CodeBlock支持C99标准
- 数据结构:双向链表实现队列与循环链表
- CXF初级入门教程
- 利用HttpSessionListener 监听类 处理一些事情
- x264 源码分析 (2)