JAVA设计模式 之 观察者模式
简介:
观察者模式是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>();
} @Override
public void registerObserver(Observer observer) {
observersList.add(observer);
} @Override
public void removeObserver(Observer observer) {
int index = observersList.indexOf(observer);
if(index >= 0){
observersList.remove(index);
}
} @Override
public 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);
} @Override
public 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
JAVA设计模式 之 观察者模式的更多相关文章
- 理解java设计模式之观察者模式
在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适 ...
- java设计模式之观察者模式以及在java中作用
观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...
- java设计模式02观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 这里主要讲一下学习内置观察者的记录,在JA ...
- java设计模式之观察者模式
观察者模式 观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式.模型-视图(View)模式.源-收听者(Listener)模式或从属者模式)是软件设计模式的一种.在此种模 ...
- 折腾Java设计模式之观察者模式
观察者模式 Define a one-to-many dependency between objects where a state change in one object results in ...
- JAVA设计模式之观察者模式 - Observer
有趣的事情发生时,可千万别错过了!有一个模式可以帮你的对象知悉现况,不会错过该对象感兴趣的事.对象甚至在运行时可决定是否要继续被通知.有了观察者,你将会消息灵通. 介绍 观察者模式的定义: 在对象之间 ...
- JAVA设计模式 之 观察者模式(JDK内置实现)
简介:使用JAVA内置的帮你搞定观察者模式. 1. 先把类图放在这里: (1). Observable类追踪所有的观察者,并通知他们. (2). Observer这个接口看起来很熟悉,它和我们之前写的 ...
- java设计模式之观察者模式(9)
Java观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者 ...
- java设计模式:观察者模式
package Observer; public class Test { /** * client测试类别 * 观察者模式一般由四部分组成: * 1摘要观察员(教科书被称为一般"Subje ...
随机推荐
- 各种编码UNICODE、UTF-8、ASCII学习笔记
本文转自csdn博客:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html ,感谢作者的分享 作者: 阮一峰 日期: ...
- phpcms响应式布局导航条
- .net4.0及Silverlight_Tools for vs2008sp1安装失败解决办法
安装.net framework 4.0失败,出现HRESULT 0xc8000222错误代码 1.开始-运行-输入cmd,运行命令 net stop WuAuServ 2.开始-运行-输入 ...
- JavaScript学习笔记——BOM_window对象
javascript浏览器对象模型-windwo对象 BOM Browser Object Model window对象 是BOM中所有对象的核心. 一.属性 1.(位置类型-获得浏览器的位置) IE ...
- HTTP2.0介绍
HTTP2.0的所有通信都是在一个TCP连接上完成的. 1.信息传输术语 1.1 流 虚拟信道,可以承载双向消息,每个流都有一个唯一的整数标识符(1.2....N); 1.2 消息 逻辑上的HTTP消 ...
- Unity3D热更全书
http://www.cnblogs.com/crazylights/p/3897742.html
- PetaPoco 使用总结(二)
接着上一篇,上一篇主要介绍了PetaPoco 基本情况,优缺点和基本的查询功能,所以这篇主要介绍的是PetaPoco 的增,删,改等功能.PetaPoco提供了完整的增,删,改,查功能.是代替SqlH ...
- python中os/sys/platform模块区别
os:This module provides a portable way of using operating system dependent functionality. sys:This m ...
- 自定义验证jquery.validate
js中填写 $(function() { validateSysConfigForm(); jQuery.validator.addMethod("validateNum", fu ...
- 小技能——markdown
如果常常要在电脑上写点东西,比如写笔记.做总结.写博客之类的,花一两个小时学会markdown还是很值的. markdown简介 markdown不是某个软件,而是一种标记语言,标记普通文本的格式,以 ...