设计模式之观察者
来源:互联网 发布:格非江南三部曲 知乎 编辑:程序博客网 时间:2024/04/25 18:40
Internet气象站例题:
提供温度、气压和湿度的接口
测量数据更新时需时时通知给第三方
需要设计开放型API,便于其他第三方公司也能接入气象站获取数据
观察者模式原理:
1、观察者模式就像定牛奶业务
1)奶站,Subject
2)用户,Observer
2、Subject:登记注册、移除和通知
3、Observer:接收输入
4、观察者模式: 对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化
用观察者模式设计的例题方案
1 两个接口package com.sk.superInterface;public interface Subject{ public void registerObserver(Observer observer); public void removeObserver(Observer observer); public void notifyObservers();}package com.sk.superInterface;public interface Observer{ public void update(float temprature,float pressure,float humidity);}2. 继承接口package com.sk.mode;import java.util.ArrayList;import com.sk.superInterface.Observer;import com.sk.superInterface.Subject;public class WeatherData implements Subject{ private float m_temprature; private float m_pressure; private float m_humidity; private ArrayList<Observer> m_observers; public WeatherData() { m_observers=new ArrayList<Observer>(); } public void setData(float m_temprature,float m_pressure,float m_humidity) { this.m_temprature=m_temprature; this.m_pressure=m_pressure; this.m_humidity=m_humidity; dataChange(); } //改变数据之后就要通知所有的观察者 private void dataChange() { notifyObservers(); } @Override public void registerObserver(Observer observer) { m_observers.add(observer); } @Override public void removeObserver(Observer observer) { if(m_observers.contains(observer)) { m_observers.remove(observer); } } @Override public void notifyObservers() { for (int i = 0,len=m_observers.size(); i < len; i++) { m_observers.get(i).update(getM_temprature(), getM_pressure(), getM_humidity()); } } public float getM_temprature() { return m_temprature; } public float getM_pressure() { return m_pressure; } public float getM_humidity() { return m_humidity; } public ArrayList<Observer> getM_observers() { return m_observers; }}package com.sk.mode;import java.awt.DisplayMode;import com.sk.superInterface.Observer;public class CurrentConditions implements Observer{ private float m_temprature; private float m_pressure; private float m_humidity; @Override public void update(float temprature, float pressure, float humidity) { this.m_humidity=humidity; this.m_pressure=pressure; this.m_temprature=temprature; display(); } public void display() { System.out.println("***Today's weather***"); System.out.println("***temprature:***"+m_temprature); System.out.println("***pressure***"+m_pressure); System.out.println("***humidity***"+m_humidity); }}3. 入口package com.sk.main;import com.sk.mode.CurrentConditions;import com.sk.mode.ForecastConditions;import com.sk.mode.WeatherData;public class InternetWeather{ public static void main(String[] args) { CurrentConditions conditions=new CurrentConditions(); ForecastConditions forecastConditions=new ForecastConditions(); WeatherData weatherData=new WeatherData(); weatherData.registerObserver(conditions); weatherData.registerObserver(forecastConditions); weatherData.setData(35, 150, 40); weatherData.removeObserver(conditions); weatherData.setData(45, 160, 50); }}
Java内置观察者
1、Java内置的观察者
Observable
Observer
2、用Java内置观察者重新设计该项目
3、内置观察者的注意点
Observable是类而不是接口
Code 地址
http://download.csdn.net/detail/kaikai_sk/9872222
阅读全文
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 工作中float引发的问题
- javaweb学习总结——Servlet开发笔记
- 《白宫发布《人工智能、自动化和经济》报告,敦促特朗普政府确保美国 AI 领先地位》笔记
- 世界上第一位程序员竟然是个妹子
- powershell:Join-Path连接多级子目录的方法
- 设计模式之观察者
- Python开发数据清洗
- PHP安全编程:跨站脚本攻击的防御
- Spring boot项目Tomcat启动与切换
- semihost/ITM机制浅析以及使用JLINK通过ITM调试stm32单片机(转)
- java、MySQL数据库中文乱码问题
- $.(fn) vs document.body.onload vs window.onload
- 代码女神——程序界里一股清风
- 解决nginx重启“var/run/nginx/nginx.pid" no such file or directory问题