观察者模式 定义了对象之间的一对多的依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
利用观察者模式,主题是具有状态的对象,并且可以控制这些状态,也就是说,有一个具有状态的主题。另一方面,观察者使用了这些状态,虽然这些状态并不属于他们。有许多的观察者,依赖主题来告诉他们状态何时改变,这就产生了一个关系, 一个主题对多个观察者的关系。
使用java内置的观察者模式
主题,被观察者对象
package cn.test.design_pattern.observer; import java.util.Observable; /** * 主题,被观察中 继承于java 内置的Observable * @author acer * */ public class WeatherData extends Observable{ private float temperature; private float humidity; private float pressure; public float getTemperature() { return temperature; } public float getHumidity() { return humidity; } public float getPressure() { return pressure; } public WeatherData() { } public void measuermentsChanged(){ /** * 在调用notifyObservers()之前,要先条用setChanged() 来指示状态已经改变 */ this.setChanged(); notifyObservers(); } public void setMeasurements(float temperature,float humidity,float pressure){ this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measuermentsChanged(); } }
观察者对象
package cn.test.design_pattern.observer; import java.util.Observable; import java.util.Observer; /** * 观察者对象,实现java 内置Observer 接口 * @author acer * */ public class CurrentConditionsDisplay implements Observer, DisplayElement { private float temperature; private float humdity; Observable observable; public CurrentConditionsDisplay(Observable observable) { /** * 构造一个 主题(被观察者对象) 并指定当前对象为观察者 */ this.observable = observable; observable.addObserver(this); } @Override public void display() { System.out.println("Current conditions: " + temperature + "F degrees and " + humdity + "%humdity"); } @Override public void update(Observable o, Object arg) { /** * 在 update() 方法中先确定被观察者是否是当前观察者说观察的对象,然后取出被观察者中的数据 */ if( o instanceof WeatherData){ WeatherData weatherData = (WeatherData) o; this.humdity = weatherData.getHumidity(); this.temperature = weatherData.getTemperature(); display(); } } }
测试代码
package cn.test.design_pattern.observer; public class WeatherStation { /** * @param args */ public static void main(String[] args) { WeatherData weatherData = new WeatherData(); CurrentConditionsDisplay display = new CurrentConditionsDisplay(weatherData); weatherData.setMeasurements(80, 120.0f, 4f); weatherData.setMeasurements(81, 120.0f, 4f); weatherData.setMeasurements(82, 120.0f, 4f); } }
总结:
1.观察者模式定义了对象之间一对多的关系。
2.主题(被观察者) 用一个共同的接口来更新观察者。
3.观察者和被观察者之间使用松耦合方式结合,被观察者不知道观察者的细节,只知道观察者实现了观察者接口。
相关推荐
设计模式之观察者模式Java版本实现和UML类设计图
Java内置的Observable类和Observer接口提供了基本的观察者模式功能,你可以通过继承Observable类和实现Observer接口来使用
设计模式--观察者模式java例子
java实现观察者设计模式,利用ApplicationListener和ApplicationEvent。Test包里有测试代码
运用观察者模式及MVC模式的整合,是javaWeb的简单的实现了选民投票
java 设计模式 观察者模式 简单实例 包括测试test类
观察者模式都能帮助实现对象之间的松耦合、依赖关系的解耦,并提供一种动态的消息通知机制
观察者设计模式,java语言实现,完全自己代码实现,未使用observable和observer
设计模式----观察者模式demo,使用java自带的工具类,实现,后面会上传一个完全自己代码实现的demo
请根据观察者模式,用Java语言设计并实现气象站程序。其中,部分代码已经写好,包括: • 观察者接口 • 主题接口 • 显示板接口 • 测试程序 请在此框架下,继续完成CurrentConditionsDisplay、ForecastDisplay...
撤销功能的实现——备忘录模式(三) 撤销功能的实现——备忘录模式(四) 撤销功能的实现——备忘录模式(五) 观察者模式-Observer Pattern 对象间的联动——观察者模式(一) 对象间的联动——观察者模式(二) ...
采用Java语言编写的一个观察者模式实例。观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,...
NULL 博文链接:https://shiwuyisheng.iteye.com/blog/799432
观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的...
用java实现的观察者模式,共需要的人学习,如果有不对的地方也请指出
根据《HeadFirst 设计模式》自己操作实现的观察者模式Java代码
为了实现观察者(Observer)的状态与主题(Subject)保持同步,观察者模式(Observer Pattern) 推荐采用发布者--订阅者(publisher--subscriber)模型,以使这组观察者(Observer)和主题(Subject)对象之间有...
介绍观察者模式的概念、特点、优缺点、适用场景和java代码简单实现
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
【例6.19】事件体系结构-观察者模式-温度显示 【例6.21】层次架构-软件测试 【例6.22】层次架构-银行- Access数据库 【例6.23】MVC架构-二手车拍卖-无观察者 【例6.24】MVC架构-二手车拍卖-观察者-3...