java设计模式-Head First设计模式之观察者模式
来源:互联网 发布:淘宝商品资质图 编辑:程序博客网 时间:2024/06/02 21:02
Head First设计模式之观察者模式
1 定义
观察者模式-在对象之间定义的一对多依赖,这样依赖,当一个状态改变状态,依赖它的对象都会收到通知,并自动更新
2 要点
1 观察者模式定义了对象之间的一对多关系
2 主题(也就是观察者)用一个共同的接口来更新观察者
3 观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者的接口
4 有多个观察者时,不可以依赖特定的顺序通知次序
5 java有多中观察者模式的实现,包括了通用的 java.util.Observable
6 此模式被应用在许多地方,比如JavaBeans、RMI
3 新增原则
1 为交互对象之间的松耦合设计而努力
4 代码实例
package Observer;public interface Observer { public void update(float temp,float humidity,float pressure); }
package Observer;public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObserver(); }
package Observer;public interface DisplayElement { public void display(); }
package Observer;public class CurrentDisplay implements Observer,DisplayElement{ private float temperature; private float humidity; private Subject weatherDate; public CurrentDisplay(Subject weatherDate) { this.weatherDate=weatherDate; weatherDate.registerObserver(this); } public void update(float temperature,float humidity,float pressure) { this.temperature=temperature; this.humidity=humidity; display(); } public void display() { System.out.println("目前状况是温度:"+temperature+"度 "+"湿度:"+humidity+"%"); } }
package Observer;import java.util.ArrayList; public class WeatherData implements Subject { private ArrayList observers; private float temperature; private float pressure; private float humidity; public WeatherData() { observers = new ArrayList(); //加上一个ArrayList来记录观察者,此ArrayList是在构造器中产生的 } public void registerObserver(Observer o) { observers.add(o); //有观察者注册时,将其加到ArrayList后面 } public void removeObserver(Observer o) { int i = observers.indexOf(o); //观察者取消注册时,将其从ArrayList中删除 if (i >= 0) { observers.remove(i); } } public void notifyObserver() { for (int i = 0; i < observers.size(); i++) { //通知每一位观察者 Observer observer = (Observer) observers.get(i); observer.update(temperature, humidity, pressure); } } public void measurementsChanged() { notifyObserver(); } public void setMeasurements(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measurementsChanged(); } }
package Observer;public class WeatherStation { public static void main(String[] args) { WeatherData weatherData=new WeatherData(); //建立一个WeatherData对象 CurrentDisplay currentDisplay=new CurrentDisplay(weatherData); //建立布告板,并把WeatherData传给它们 weatherData.setMeasurements(80, 65, 30.4f); //模拟新的气象测量 weatherData.setMeasurements(82, 70, 29.2f); weatherData.setMeasurements(78, 90, 29.2f); } }
0 0
- java设计模式-Head First设计模式之观察者模式
- 《Head First 设计模式》之观察者模式
- 《Head First 设计模式》之观察者模式
- head first设计模式之观察者模式
- head first 设计模式之---------观察者模式
- head first 设计模式:观察者模式1
- Head First设计模式-观察者模式
- 《Head First 设计模式》观察者模式
- Head First 设计模式笔记--观察者模式
- Head First 设计模式2 观察者模式
- <Head First 设计模式>:观察者模式--Weather
- Head First设计模式—观察者模式
- 【Head First设计模式-读书笔记】观察者模式
- Head First设计模式---策略、观察者模式
- Head First 设计模式-观察者模式
- 《Head First设计模式》 - 观察者模式
- Head First-设计模式:观察者模式
- 读书笔记---Head First 设计模式--- 观察者模式
- win7系统下安装UbuntuKylin16.04双系统成功经验
- linux根文件系统/etc/group文件详解
- ] Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- 评估容器安全的现状,解你心中疑惑
- js模板,我们可以在<script>片断中定义一个被JS调用的代码,但代码又不在页面上显示.
- java设计模式-Head First设计模式之观察者模式
- hdu4807Lunch Time【费用流】
- 第三周项目4—顺序表的运用
- Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据
- http状态码的详解
- 第四周项目2 建设“单链表”算法库
- logstash 发送zabbix 给消息加上type
- lvslinux虚拟服务器集群io分流三种负载均衡方式
- RxJavaing