java设计模式之观察者模式
来源:互联网 发布:人工智能 被黑客攻击 编辑:程序博客网 时间:2024/05/18 00:06
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
观察者模式类图如下:
气象监测应用实例:
此系统中的三个部分是气象站(获取实际气象数据的物理装置)、WeatherData对象(追踪来自气象站的数据,并更新布告板)和布告板(显示目前天气状况给用户看)。
类图如下:
Subject接口代码实现:
package com.weather;public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObserver();}
Observer接口代码实现:
package com.weather;public interface Observer { public void update(float tempture,float humidity,float pressure);}
DisplayElement接口代码实现:
package com.weather;public interface DisplayElement { public void display();}
WeatherData类代码实现:
package com.weather;import java.util.ArrayList;public class WeatherData implements Subject{ private ArrayList<Observer> observers; private float temperature; private float humidity; private float pressure; public WeatherData(){ observers = new ArrayList<Observer>(); } public void registerObserver(Observer o) { // TODO Auto-generated method stub observers.add(o); } public void removeObserver(Observer o) { // TODO Auto-generated method stub int i = observers.indexOf(o); if (i >= 0) { observers.remove(i); } } public void notifyObserver() { // TODO Auto-generated method stub 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 huminity,float pressure){ this.temperature = temperature; this.humidity = huminity; this.pressure = pressure; measurementsChanged(); }}
CurrentConditionsDisplay类代码实现:
package com.weather;public class CurrentConditionsDisplay implements Observer,DisplayElement{ private float temperature; private float humidity; private float pressure; private Subject weatherData; public CurrentConditionsDisplay(Subject weatherData){ this.weatherData = weatherData; weatherData.registerObserver(this); } public void display() { // TODO Auto-generated method stub System.out.println("current tempeture:"+temperature+",current humidity:"+humidity +",current pressure:"+pressure); } public void update(float tempture, float humidity, float pressure) { // TODO Auto-generated method stub this.temperature = tempture; this.humidity = humidity; this.pressure = pressure; display(); }}
WeatherStation实例代码实现:
package com.weather;public class WeatherStation { public static void main(String[] args){ WeatherData weatherData = new WeatherData(); CurrentConditionsDisplay currentConditionsDisplay = new CurrentConditionsDisplay(weatherData); weatherData.setmeasureMents(38, 65, 32.1f); }}
运行结果:
current tempeture:38.0,current humidity:65.0,current pressure:32.1
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设计模式之观察者模式
- USACO 你的飞碟在这里-洛谷 1200
- 类模板_派生_类模板语法
- 用整数类型处理货币
- 京东云缓存JIMDB建设之路
- 编写一个函数实现n^k,使用递归实现
- java设计模式之观察者模式
- error C4996: 'scanf': This function or variable may be unsafe.Visual Studio系列编译器使用scanf函数报错
- Zookeeper的功能以及工作原理
- javascript基本数据类型
- Android性能优化典范——通晓过度绘制(Understanding Overdraw)
- 柔性数组
- spring事件机制——异步配置
- Java基础篇(四——1)——集合框架之Collection接口
- 按键从本地备份升级实现android