Head First设计模式:观察者模式
来源:互联网 发布:魔兽世界画面优化 编辑:程序博客网 时间:2024/05/10 03:20
观察者模式:定义了对象之间的一对多依赖,这样依赖,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新
例子:
package com.zoey.allTest.pattern.headFirst.observerPattern.book;public interface Subject { public void registerObserver(Observer o); public void deleteObserver(Observer o); public void notifyObservers();//当主题状态改变时,这个方法被调用,通知所有观察者}
package com.zoey.allTest.pattern.headFirst.observerPattern.book;public interface Observer { public void update(float temp, float humidity, float pressure);}
package com.zoey.allTest.pattern.headFirst.observerPattern.book;public interface DisplayElement { public void display();}
package com.zoey.allTest.pattern.headFirst.observerPattern.book;public class CurrentConditionsDisplay implements Observer, DisplayElement { private float temp; private float humidity; @SuppressWarnings("unused") private Subject weatherData; public CurrentConditionsDisplay(Subject weatherData) { this.weatherData = weatherData; weatherData.registerObserver(this); } public void update(float temp, float humidity, float pressure) { this.temp = temp; this.humidity = humidity; display(); } public void display() { System.out.println(temp + " " + humidity); }}
package com.zoey.allTest.pattern.headFirst.observerPattern.book;import java.util.ArrayList;public class WeatherData implements Subject { @SuppressWarnings("rawtypes") private ArrayList observers; private float temp; private float humidity; private float pressure; @SuppressWarnings("rawtypes") public WeatherData() { observers = new ArrayList(); } @SuppressWarnings("unchecked") public void registerObserver(Observer o) { observers.add(o); } public void deleteObserver(Observer o) { int i = observers.indexOf(o); if ( i <= 0) { observers.remove(i); } } public void notifyObservers() { for (int i = 0; i < observers.size(); i ++) { Observer o = (Observer) observers.get(i); o.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(); }}
package com.zoey.allTest.pattern.headFirst.observerPattern.book;public class WeatherDataTest { public static void main(String[] args) { WeatherData w = new WeatherData(); new CurrentConditionsDisplay(w); w.setMeasurements(45, 52, 33f); }}
阅读全文
0 0
- head first 设计模式:观察者模式1
- Head First设计模式-观察者模式
- 《Head First 设计模式》观察者模式
- Head First 设计模式笔记--观察者模式
- 《Head First 设计模式》之观察者模式
- Head First 设计模式2 观察者模式
- 《Head First 设计模式》之观察者模式
- <Head First 设计模式>:观察者模式--Weather
- Head First设计模式—观察者模式
- 【Head First设计模式-读书笔记】观察者模式
- Head First设计模式---策略、观察者模式
- Head First 设计模式-观察者模式
- 《Head First设计模式》 - 观察者模式
- head first设计模式之观察者模式
- Head First-设计模式:观察者模式
- head first 设计模式之---------观察者模式
- 读书笔记---Head First 设计模式--- 观察者模式
- Head First设计模式:观察者模式
- 32位Linux系统的虚拟地址映射 <一>
- 实现MyBatis与Spring的整合
- kvo 观察者模式底层深究
- openSmile-2.3.0批量提取mfcc参数
- Java基础03
- Head First设计模式:观察者模式
- 用三个vector容器解决全排列问题
- scala基础
- Jersey2.25.1集成freemarker
- 1小时学会用UML
- nginx系列(一)初识
- SQL之事务
- 王者荣耀高并发背后的故事
- 随机点名demo