设计模式----观察者模式
来源:互联网 发布:文本编辑 mac 编辑:程序博客网 时间:2024/05/01 09:56
观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
(注册、移除)
类图:
接口:
public interface Subject {public void registerObserver(Object o);public void removeObserver(Object o);public void notifyObservers();}
public interface Observer {public void update(float temp, float humidity, float pressure);}
public interface DisplayElement {public void display();}
类:
import java.util.ArrayList;public class WeatherData implements Subject {private ArrayList observers;private float temperature;private float humidity;private float pressure;public WeatherData(){observers = new ArrayList();}@Overridepublic void registerObserver(Object o) {observers.add(o);}@Overridepublic void removeObserver(Object o) {int i = observers.indexOf(o);if (i >= 0){observers.remove(o);}}@Overridepublic void notifyObservers() {for (int i = 0; i < observers.size(); i++){Observer observer = (Observer) observers.get(i);observer.update(temperature, humidity, pressure);}}public void measurementsChanges(){notifyObservers();}public void setMeasurements(float temperature, float humidity, float pressure){this.humidity = humidity;this.temperature = temperature;this.pressure = pressure;measurementsChanges();}//其他方法....}
public class CurrentConditionDisplay implements Observer, DisplayElement {private float temperature;private float humidity;private WeatherData weatherData;public CurrentConditionDisplay(WeatherData w){this.weatherData = w;}@Overridepublic void display() {System.out.println("Current condition: " + temperature + ", " + humidity);}@Overridepublic void update(float temp, float humidity, float pressure) {this.temperature = temp;this.humidity = humidity;display();}}
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 不错的机器学习自学网站
- Lintcode - Interleaving Positive and Negative Numbers
- c标签之foreach介绍及使用
- Unity4.6新UI系统初探(uGUI)
- 1006 排序输出 关于空间换时间...******
- 设计模式----观察者模式
- hd2024
- jQuery的deferred对象详解
- 编程语言以及周边工具 Logo
- Extjs5.1(9):Grid组件
- 关于adb4robotium跨进程框架抛出InputStream cannot be null的异常的解决方案
- 蔡崇信——阿里隐英雄
- 关于HttpClient发送get请求自动处理302状态码
- 年终大学习之MySQL数据库优化学习笔记(六) ——索引(一)