设计模式之观察者模式
2016-11-06 22:27
274 查看
设计模式之观察者模式
观察者模式的特点:定义了对象之间的一对多的依赖。图什么的我就不太想画了。
简单说的是-找一个对象放置容器,容器放置实现某类接口的对象,当对象内容变化的时候同时调用容器里面对象对应的方法
大家可以理解为报纸订阅。报社和读者之间的对应关系
观察者模式的实现
当然你也可以使用实现 java.util.observable java.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"); } }
相关文章推荐
- 设计模式与泡mm的关系之Observer观察者模式及再思考
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 设计模式随笔系列:气象站的故事-观察者模式(Observer)[原]
- 利用观察者模式设计仿真器内核接口
- .NET中的设计模式五:观察者模式
- 设计模式之Observer观察者模式
- 认识观察者模式(设计模式)[转载]
- 设计模式学习笔记(二十一)——Observer观察者
- 用 spring 实现观察者设计模式
- .NET中的设计模式五:观察者模式 选择自 lane_cn 的 Blog
- 设计模式之观察者模式 (原创)
- 设计模式之观察者模式(Observer Pattern)(一)
- 设计模式之观察者模式
- IssueVision 学习笔记(三)-----设计模式之OBSERVER(观察者)模式
- 设计模式之观察者模式(Observer Pattern)(二)
- 探究观察者设计模式
- GEF框架中的设计模型(观察者模式)
- C#设计模式-观察者observer模式实现
- AspectJ实现设计模式(一)——观察者模式