JAVA设计模式 之 观察者模式
来源:互联网 发布:天启秒杀软件 编辑:程序博客网 时间:2024/06/16 21:04
简介:
观察者模式是JDK中最多的设计模式之一,非常有用,观察者模式介绍了一对多的依赖关系及松耦合,有了观察者,你将会消息灵通。
认识观察者模式,看一个报纸、杂志订阅是怎么回事:
(1). 报社的业务就是出版报纸。
(2). 向某家报社订阅报纸,只要他们有新的报纸,就会给你送来,只要你是他们的订户,你就会一直收到新报纸。
(3). 当你不想再看报纸的时候,取消订阅,他们就不会再送来新报纸来。
(4). 只要报社还在运营,就会一直有人向他们订阅报纸或取消报纸。
出版社 + 订阅者 = 观察者模式
1. 定义:
观察者模式定义了一对多依赖,这样一来,当一个对象发生改变状态时,它的所有依赖者都跟着收到通知并自动更新。
2. 设计原则:
为了交互对象之间的松耦合设计而努力
松耦合的好处:当两个对象之间松耦合,它们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。
3. 代码实现:
3.1 首先我们先定义
观察者主题接口
package com.chengzhang.subject;/** * 主题接口 * @author Administrator */public interface Subject {/** * 注册观察者 * @param observer */public void registerObserver(Observer observer);/** * 移除观察者 * @param observer */public void removeObserver(Observer observer);/** * 通知观察者 */public void notifyObservers();
观察者接口
package com.chengzhang.subject;/** * 观察者接口 * @author Administrator */public interface Observer {/** * 更新数据 * @param temp * @param humidity * @param pressure */public void update(float temp, float humidity, float pressure);}
3.2 然后我们实现以上接口
实现主题接口
package com.chengzhang.subject.impl;import java.util.ArrayList;import java.util.List;import com.chengzhang.subject.Observer;import com.chengzhang.subject.Subject;public class WeatherData implements Subject {// 存放观察者对象private List<Observer> observersList;private float temperature;private float humidity;private float pressure;public WeatherData(){observersList = new ArrayList<Observer>();}@Overridepublic void registerObserver(Observer observer) {observersList.add(observer);}@Overridepublic void removeObserver(Observer observer) {int index = observersList.indexOf(observer);if(index >= 0){observersList.remove(index);}}@Overridepublic void notifyObservers() {for(int i=0; i<observersList.size(); i++){Observer observer = observersList.get(i);observer.update(temperature, humidity, pressure);}}/** * 天气发生变化会自动调用该方法 */public void measurementsChanged(){notifyObservers();}/** * 假设天气发生变化 * @param temperature * @param humidity * @param pressure */public void setMeasurements(float temperature, float humidity, float pressure){this.temperature = temperature;this.humidity = humidity;this.pressure = pressure;measurementsChanged();}}
实现布告板接口
package com.chengzhang.subject.impl;import com.chengzhang.subject.Observer;import com.chengzhang.subject.Subject;public class CurrentConditionsDisplay implements Observer {private float temperature;private float humidity;private float pressure;private Subject weatherData;public CurrentConditionsDisplay(WeatherData weatherData){this.weatherData = weatherData;this.weatherData.registerObserver(this);}@Overridepublic void update(float temperature, float humidity, float pressure) {this.temperature = temperature;this.humidity = humidity;this.pressure = pressure;display();}public void display(){System.out.println("当前温度:" + this.temperature);System.out.println("当期湿度:" + this.humidity);System.out.println("当期气压:" + this.pressure);}}
4. 观察者模式测试
package com.chengzhang.subject.impl;public class WeatherStation {public static void main(String[] args) {// 创建主题对象WeatherData weatherData = new WeatherData();// 创建观察者对象并注册CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);// 天气发生变化weatherData.setMeasurements(12.44f, 23.12f, 22);}}
4.1 输出结果
当前温度:12.44当期湿度:23.12当期气压:22.0
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设计模式之观察者模式
- 关于程序变量就近原则的实例
- 网状拓扑结构
- Spring MVC 3 深入总结
- 实战Linux Bluetooth编程 (六) L2CAP编程实例
- 【Cocoa and Object-c : Up and Running 笔记】03 Simple C for Object-c
- JAVA设计模式 之 观察者模式
- #if 0 #end if
- 取石子游戏
- 技术路线的选择重要但不具有决定性
- cakephp: title
- 第四章 动作功能
- 实战Linux Bluetooth编程 (七) SDP协议
- linux操作命令:chmod修改文件权限
- 将局部变量的作用域最小化