首页 > 代码库 > 设计模式 - 观察者模式(Observer Pattern) Java内置 使用方法
设计模式 - 观察者模式(Observer Pattern) Java内置 使用方法
观察者模式(Observer Pattern) Java内置 使用方法
本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659
观察者模式(observer pattern)详解, 参见: http://blog.csdn.net/caroline_wendy/article/details/26583157
Java内置的观察者模式, 是通过继承父类, 实现观察者模式的几个主要函数:
Observerable(可被观察的): 是一个父类(class),addObserver(), 添加观察者;deleteObserver(), 删除观察者;
notifyObservers(), 通知观察者;setChanged(), 确认更改;
Observer(观察者): 是一个接口(interface), update(), 更新观察者数据;
setChanged()->notifyObservers(), 必须要先使用setChanged(), 再使用notifyObservers(), 即先确认提交, 再通知观察者;
观察者的更新接口update(Observerable o, Object arg), 即可以使用推(push), 也可以使用拉(pull);
如果notifyObservers(arg), 传递参数, 则为推(push)的方法, 如果没有参数, 则为拉(pull)的方式, 即使用get()方法获取;
观察者的通知(notify)顺序是先入后出的模式.
Observerable(可被观察的) 的 代码:
/** * @time 2014年5月22日 */ package observer.java; import java.util.Observable; /** * @author C.L.Wang * */ public class WeatherData extends Observable { private float temperature; private float humidity; private float pressure; public WeatherData() {} public void measurementsChanged() { setChanged(); notifyObservers(); } public void setMeasurements(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measurementsChanged(); } public float getTemperature() { return temperature; } public float getHumidity() { return humidity; } public float getPressure() { return pressure; } }
Observer(观察者)的代码:
/** * @time 2014年5月22日 */ package observer.java; import java.util.Observable; import java.util.Observer; /** * @author C.L.Wang * */ public class CurrentConditionsDisplay implements Observer, DisplayElement { Observable observable; private float temperature; private float humidity; public CurrentConditionsDisplay(Observable observable) { this.observable = observable; observable.addObserver(this); } /* (non-Javadoc) * @see observer.java.DisplayElement#display() */ @Override public void display() { // TODO Auto-generated method stub System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity"); } /* (non-Javadoc) * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ @Override public void update(Observable o, Object arg) { // TODO Auto-generated method stub if (o instanceof WeatherData) { WeatherData weatherData = http://www.mamicode.com/(WeatherData)o;>
其余代码不一一列出, 类似参见: http://blog.csdn.net/caroline_wendy/article/details/26583157
测试代码:
package observer.java; public class WeatherStation { public static void main(String[] args) { WeatherData weatherData = http://www.mamicode.com/new WeatherData();>
输出:Forecast: Improving weather on the way! Avg/Max/Min temperature = 80.0/80.0/80.0 Current conditions: 80.0F degrees and 65.0% humidity Forecast: Watch out for cooler, rainy weather Avg/Max/Min temperature = 81.0/82.0/80.0 Current conditions: 82.0F degrees and 70.0% humidity Forecast: More of the same Avg/Max/Min temperature = 80.0/82.0/78.0 Current conditions: 78.0F degrees and 90.0% humidity
注意: 通知的顺序是先入后出.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。