观察者模式
来源:互联网 发布:淘宝店主贷款 编辑:程序博客网 时间:2024/06/05 07:55
Demo场景:终端通过WeatherData实时显示(获取)变化的数据。
(1)主题接口:Subject
package designpattern.observer.v1;/** * 主题接口 */public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObservers();}
(2)主题接口实现类:WeatherData
package designpattern.observer.v1;import java.util.ArrayList;public class WeatherData implements Subject { private ArrayList<Observer> observers; private float temprature; private float humidity; private float pressure; public WeatherData(){ observers = new ArrayList<Observer>(); } @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void removeObserver(Observer observer) { int i = observers.indexOf(observer); if(i>0){ observers.remove(observer); } } @Override public void notifyObservers() { for(int i=0; i<observers.size(); i++){ Observer observer = observers.get(i); observer.update(temprature, humidity, pressure); } } //检测到变化时,通知观察者 public void measurementsChanged(){ notifyObservers(); } public void setMeasurements(float temprature, float humidity, float pressure){ this.temprature = temprature; this.humidity = humidity; this.pressure = pressure; measurementsChanged(); }}
(3)观察者接口:Observer
package designpattern.observer.v1;/** * 定义观察者接口 */public interface Observer { public void update(float temp, float humidity, float pressure);}
(4)观察者play行为接口:DisplayElement
package designpattern.observer.v1;/** * 定义显示这个行为的接口 */public interface DisplayElement { public void display();}
(5)观察者接口、行为接口实现类:CurrentConditionsDisplay
package designpattern.observer.v1;public class CurrentConditionsDisplay implements Observer, DisplayElement { private float temprature; private float humidity; private Subject weatherData; public CurrentConditionsDisplay(Subject weatherData){ this.weatherData = weatherData; weatherData.registerObserver(this); } @Override public void display() { System.out.println("Current Conditions:" + temprature + "C degrees and " + humidity + "% humidity"); } @Override public void update(float temp, float humidity, float pressure) { this.temprature = temp; this.humidity = humidity; display(); }}
演示观察者模式
package designpattern.observer.v1;public class WeatherStation { public static void main(String[] args) { //实例化一个主题 WeatherData weatherData = new WeatherData(); CurrentConditionsDisplay currentCondDisplay = new CurrentConditionsDisplay(weatherData); weatherData.setMeasurements(10, 20, 30.4f); weatherData.setMeasurements(11, 19, 35.6f); weatherData.setMeasurements(15, 30, 40.4f); }}
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- Java 接口和抽象类区别
- YYModel详解
- Android反编译 -- 错误代码还原
- 状态机
- 简单编码
- 观察者模式
- springmvc 相应静态资源,view-controler-path
- 堆与堆排序与topK问题
- 在html中控制tr和td的个数
- 终于开CSDN了。。。
- 干货--Redis+Spring+Struts2实现网站计算器应用项目案例
- Ubuntu服务器-SVN
- Java网络连接-URLConnection类的使用
- C语言循环的实现