java设计模式之观察者模式
来源:互联网 发布:lcd1602不显示数据 编辑:程序博客网 时间:2024/05/17 04:36
观察者模式定义了一系列的对象之间的一对多的关系。
当一个对象改变状态的时候,其他依赖者都会受到通知。
观察者模式可以比作是报纸出版商(WeatherData )和订阅者(interface Observer,CurrentConditionsDisplay ,StatisticsDisplay,ForecastDisplay )之间的关系。
如果订阅者需要收到新的报纸(temperature,humidity,pressure),则需要向报社订阅报纸(public void registerObserver(Observer o)),此时报社会把订阅者的名字写在一个名单上( private List observers),这样每次都可以从报童(interface DisplayElement)根据报社提供的名单来派发报纸(public void notifyObserver()),订阅者可以每次从报童那里得到报纸,如果有一天订阅者不再需要报纸则报社会把订阅者的名字从订阅者的名单列表中删除(public void removeObserver(Observer o))。
package tablejava;import java.util.ArrayList;import java.util.List;interface Subject{ public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObserver();}interface Observer{ public void update(float temp,float humidity,float pressure);}interface DisplayElement{ public void display();}class WeatherData implements Subject{ private List observers; private float temperature; private float humidity; private float pressure; public WeatherData() { this.observers=new ArrayList(); } @Override public void registerObserver(Observer o) { this.observers.add(o); } @Override public void removeObserver(Observer o) { int i=observers.indexOf(o); if(i>0) { observers.remove(o); } } @Override public void notifyObserver() { for(int i=0;i<this.observers.size();i++) { Observer observer=(Observer)observers.get(i); observer.update(this.temperature, this.humidity, this.pressure); } } public void measurementsChanged() { notifyObserver(); } public void setMeasurements(float temperature,float humidity,float pressure) { this.temperature=temperature; this.humidity=humidity; this.pressure=pressure; measurementsChanged(); }}class CurrentConditionsDisplay implements Observer,DisplayElement{ private float temperature; private float humidity; private Subject weatherData; public CurrentConditionsDisplay(Subject weatherData) { super(); this.weatherData = weatherData; weatherData.registerObserver(this); } @Override public void display() { System.out.println("Current conditions:"+temperature+" F degrees and "+humidity+"% humidity"); } @Override public void update(float temp, float humidity, float pressure) { this.temperature=temp; this.humidity=humidity; this.display(); }}class StatisticsDisplay implements Observer,DisplayElement{ private float temperature; private float humidity; private Subject weatherData; public StatisticsDisplay(Subject weatherData) { super(); this.weatherData = weatherData; weatherData.registerObserver(this); } @Override public void display() { System.out.println("Statistics conditions:"+temperature+" F degrees and "+humidity+"% humidity"); } @Override public void update(float temp, float humidity, float pressure) { this.temperature=temp; this.humidity=humidity; this.display(); }}class ForecastDisplay implements Observer,DisplayElement{ private float temperature; private float humidity; private Subject weatherData; public ForecastDisplay(Subject weatherData) { super(); this.weatherData = weatherData; weatherData.registerObserver(this); } @Override public void display() { System.out.println("Statistics conditions:"+temperature+" F degrees and "+humidity+"% humidity"); } @Override public void update(float temp, float humidity, float pressure) { this.temperature=temp; this.humidity=humidity; this.display(); }}public class ObserverMethod { public static void main(String[] args) { WeatherData weatherData=new WeatherData(); CurrentConditionsDisplay currentDisplay=new CurrentConditionsDisplay(weatherData); StatisticsDisplay statisticsDisplay=new StatisticsDisplay(weatherData); ForecastDisplay forecastDispaly=new ForecastDisplay(weatherData); weatherData.setMeasurements(80, 65, 30.4f); weatherData.setMeasurements(81, 66, 31.4f); weatherData.setMeasurements(82, 67, 32.4f); }}
运行结果:
Current conditions:80.0 F degrees and 65.0% humidityStatistics conditions:80.0 F degrees and 65.0% humidityStatistics conditions:80.0 F degrees and 65.0% humidityCurrent conditions:81.0 F degrees and 66.0% humidityStatistics conditions:81.0 F degrees and 66.0% humidityStatistics conditions:81.0 F degrees and 66.0% humidityCurrent conditions:82.0 F degrees and 67.0% humidityStatistics conditions:82.0 F degrees and 67.0% humidityStatistics conditions:82.0 F degrees and 67.0% humidity
这是上面的代码的逻辑:
阅读全文
0 0
- java设计模式之“观察者设计模式”
- Java设计模式之观察者设计模式
- 《java设计模式》之观察者设计模式
- Java设计模式之观察者
- Java设计模式之观察者
- Java设计模式之Observer(观察者)模式
- Java设计模式之Observer 观察者模式
- Java设计模式之Observer-观察者模式
- java 设计模式之二-观察者模式
- Java设计模式之观察者模式
- java设计模式之观察者模式
- java设计模式之观察者模式Observer
- java设计模式之观察者模式
- Java设计模式之观察者模式
- JAVA设计模式之观察者模式2
- java与设计模式之观察者模式
- Java--设计模式之观察者模式
- java设计模式之观察者模式
- 大数据预科班10
- C/C++与Matlab混合编程初探
- 均线策略---使用quartz实现策略
- 欢迎使用CSDN-markdown编辑器
- Dropout解析及个人总结
- java设计模式之观察者模式
- codeforces Gym
- Hrbust 2064 萌萌哒十五酱的宠物~(树链剖分+线段树)
- composer安装
- set -e作用
- strtok函数
- Linux 常见面试题总结
- js继承方式及其优缺点
- 求大佬提供一份java面试题文档