Head First设计模式笔记(观察者模式)
来源:互联网 发布:折线图数据单位不一样 编辑:程序博客网 时间:2024/06/06 01:30
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
1.主题
package com.TWO;public interface Subject { void registerObserver(Observer o); void removeObserver(Observer o); //当主题状态改变时,这个方法会被调用,以通知所有的观察者 void notifyObservers();}
观察者
package com.TWO;public interface Observer { //当气象观察值改变时,主题会把这些状态值当做方法的参数,传给观察者 void update(float temp,float humidity,float pressure);}
展现接口
package com.TWO;public interface DisplayElement { //当布告板需要显示时,调用此方法 void display();}
真正的主题 实现Subject接口
package com.TWO;import java.util.ArrayList;public class WeatherData implements Subject{ //用一个集合来记录观察者,在构造器中建立 private ArrayList observers; private float temp; private float humidity; private float pressure; public WeatherData(){ observers = new ArrayList(); } //当注册观察者,把它加到Arraylist中 @Override public void registerObserver(Observer o) { observers.add(o); } //当观察者想取消注册,我们把它从list中删除 @Override public void removeObserver(Observer o) { int i = observers.indexOf(o); if(i >= 0){ observers.remove(i); } } @Override public void notifyObservers() { for(int i = 0;i< observers.size();i++){ Observer observer = (Observer)observers.get(i); observer.update(temp, humidity, pressure); } } public void measurementsChanged(){ notifyObservers(); } public void setMeasurements(float temp,float humidity,float pressure){ this.temp = temp; this.humidity =humidity; this.pressure = pressure; measurementsChanged(); } float getTemperature(){ return (float)0.0; } float getHumidity(){ return (float)0.0; } float getPressure(){ return (float) 0.0; }}
接下来是几个观察者
1.
package com.TWO;public class CurrentConditionsDisplay implements Observer,DisplayElement{ private float temp; private float humidity; private Subject weatherData; //构造器需要weatherData对象作为注册之用 public CurrentConditionsDisplay(Subject weatherData){ this.weatherData = weatherData; weatherData.registerObserver(this); } @Override public void update(float temp,float humidity,float pressure) { this.temp = temp; this.humidity = humidity; display(); } //显示当前观察值 @Override public void display() { System.out.println("temp = "+temp + ";humidity = "+ humidity); }}
2.
package com.TWO;public class ForecastDisplay implements Observer,DisplayElement{ @Override public void display() { // TODO Auto-generated method stub } @Override public void update(float temp,float humidity,float pressure) { // TODO Auto-generated method stub }}
3.
package com.TWO;public class StatisticsDisplay implements Observer,DisplayElement{ //显示最小,平均和最大的观察值 @Override public void display() { // TODO Auto-generated method stub } @Override public void update(float temp,float humidity,float pressure) { // TODO Auto-generated method stub }}
4.
package com.TWO;public class ThirdPartyDisplay implements Observer,DisplayElement { //显示基于观察值的其他内容 @Override public void display() { // TODO Auto-generated method stub } @Override public void update(float temp,float humidity,float pressure) { // TODO Auto-generated method stub }}
后面几个我也没具体写
最后测试类
package com.TWO;public class Main { public static void main(String[] args){ WeatherData weatherData = new WeatherData(); CurrentConditionsDisplay display = new CurrentConditionsDisplay(weatherData); //模拟数据变化 weatherData.setMeasurements(30, 40, 50); }}
阅读全文
0 0
- Head First 设计模式笔记--观察者模式
- Head First 设计模式(2)- 观察者模式 笔记
- Head First设计模式学习笔记-------(2)观察者模式
- Head First设计模式笔记(观察者模式)
- Head First 设计模式学习笔记(2)--观察者模式
- 《Head First 设计模式》学习笔记之观察者模式
- Head First设计模式学习笔记——观察者模式
- 《Head first设计模式》学习笔记 - 观察者模式
- 《Head first设计模式》学习笔记 – 观察者模式
- head first 设计模式:观察者模式1
- Head First设计模式-观察者模式
- 《Head First 设计模式》观察者模式
- 《Head First 设计模式》之观察者模式
- Head First 设计模式2 观察者模式
- 《Head First 设计模式》之观察者模式
- <Head First 设计模式>:观察者模式--Weather
- Head First设计模式—观察者模式
- 【Head First设计模式-读书笔记】观察者模式
- 边沿检测
- HTML编码规范整理
- Coin sums Problem 31
- mac 挂载远程文件
- java内存管理深入浅出
- Head First设计模式笔记(观察者模式)
- 7190
- Windows下编写shell脚本出现\r错误解决方法
- ES6
- LeetCode: 412. Fizz Buzz
- K-diff Pairs in an Array
- 博客地址
- 自定义注解
- arm-linx-参数