设计模式之观察者模式
来源:互联网 发布:淘宝助手宝贝模板 编辑:程序博客网 时间:2024/06/15 11:52
设计模式之观察者模式
观察者模式的特点:定义了对象之间的一对多的依赖。
图什么的我就不太想画了。
简单说的是-找一个对象放置容器,容器放置实现某类接口的对象,当对象内容变化的时候同时调用容器里面对象对应的方法
大家可以理解为报纸订阅。报社和读者之间的对应关系
观察者模式的实现
当然你也可以使用实现java.util.observablejava.util.observer;
package design_partner;import java.util.ArrayList;import java.util.Observer;import org.omg.CORBA.PUBLIC_MEMBER;public class TestObserver { public static void main(String[] argv){ System.out.println("start:observer"); WeatherData weatherData = new WeatherData(); CurrentConditionDisplay conditionDisplay = new CurrentConditionDisplay(weatherData); weatherData.setMeasurements(80, 65, 30.4f); weatherData.setMeasurements(82, 70, 29.2f); weatherData.setMeasurements(78, 90, 29.4f); }}interface Subject{ public void registerObserver(MyObserver o); public void removeObserver(MyObserver o); public void notifyObservers();}interface MyObserver{ public void update(float temp,float humidity,float pressure);}interface DisplayElement{ public void display();}class WeatherData implements Subject{ private ArrayList<MyObserver> observers; private float temperature; private float humidity; private float pressure; public WeatherData() { observers = new ArrayList<MyObserver>(); } public void registerObserver(MyObserver o){ observers.add(o); } public void removeObserver(MyObserver o){ int i = observers.indexOf(o); if(i>=0){ observers.remove(i); } } public void notifyObservers(){ for(int i=0;i<observers.size();++i){ MyObserver observer = (MyObserver) observers.get(i); observer.update(temperature, humidity, pressure); } } public void measurementsChanged() { notifyObservers(); } public void setMeasurements(float temp,float humidity,float pressure) { this.temperature = temp; this.humidity = humidity; this.pressure = pressure; measurementsChanged(); }}class CurrentConditionDisplay implements MyObserver,DisplayElement{ private float temperature; private float humidity; private Subject weatherData; CurrentConditionDisplay(Subject weatherData){ this.weatherData = weatherData; weatherData.registerObserver(this); } public void update(float temperature,float humidity,float pressure){ this.temperature = temperature; this.humidity = humidity; display(); } public void display(){ System.out.println("current conditions:"+temperature+"F degress and "+ humidity+" %humidity"); }}
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- Group By 和 Having, Where ,Order by的执行顺序
- Error: Your project contains C++ files but it is not using a supported native build system
- PCM1863应用笔记
- Android 控件布局常用属性
- 我的Java后端书架 (2016年暖冬4.0版)
- 设计模式之观察者模式
- 感想
- 20161106
- MATLAB 常用函数的解释
- 编程题#1:单词翻转
- 模拟实现strlen函数
- Labview使用自定义控件实现,管道内液体流动效果
- 关于org.apache.http包中的HttpClient在myeclipse中无法解析问题
- 我也来列一列我的读书清单