Observer模式的意图是“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”。从这段话里我们可以得到两个信息,如下:
1, 观察者(具体执行操作的对象,有多个)
2, 被观察者(顾名思义是被观察的对象,如果该对象发生某些变化则通知观察者执行对应的操)
JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。
总结, 观察者模式的应用场景:
1、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
2、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
观察者模式的优点:
1、 Subject和Observer之间是松偶合的,分别可以各自独立改变。
2、 Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。
被观察者 烧水水温。。。 import java.util.Observable; public class Heater extends Observable { private int temperature; public int getTemperature() { return temperature; } public void setTemperature(int temperature) { this.temperature = temperature; } public void boilWater() { for (int i = 90; i < 100; i++) { temperature = i; this.setChanged(); this.notifyObservers(temperature); } } }
观察者 温度显示器 import java.util.Observable; import java.util.Observer; public class Display extends Observable implements Observer { private String status = "未开"; public void setStatus(String status) { this.status = status; } public void displayTemputer(int temperature ) { if (temperature > 95) { this.setStatus("沸腾"); this.setChanged(); this.notifyObservers(); } System.out.println("状态:" + status + " 现在温度:" + temperature + ""); } public void update(Observable o, Object arg) { displayTemputer(arg);// } }
观察者 警报器 import java.util.Observable; import java.util.Observer; public class Alarm implements Observer { public void makeAlarm(int temperature) { System.out.println("嘀嘀嘀...水已经烧开 "); } public void update(Observable o, Object arg) { makeAlarm(arg); } }
测试类 public class testObserver { public static void main(String[] args) { Heater header = new Heater(); Display display = new Display(); Alarm alarm = new Alarm(); header.addObserver(display); display.addObserver(alarm); header.boilWater(); } }
运行结果: 引用 状态:未开 现在温度:90 状态:未开 现在温度:91 状态:未开 现在温度:92 状态:未开 现在温度:93 状态:未开 现在温度:94 状态:未开 现在温度:95 嘀嘀嘀...水已经烧开 状态:沸腾 现在温度:96 嘀嘀嘀...水已经烧开 状态:沸腾 现在温度:97 嘀嘀嘀...水已经烧开 状态:沸腾 现在温度:98 嘀嘀嘀...水已经烧开 状态:沸腾 现在温度:99
相关推荐
设计模式--观察者模式java例子
Android设计模式--观察者模式DEMO 观察者模式是一个使用频率非常高的模式,他最常用的地方是GUI系统和订阅-发布系统。 该模式的最重要的作用就是解耦,使观察者和被观察者之间依赖尽可能小,甚至好无依赖。
JAVA-设计模式-行为型模式-观察者模式
设计模式-观察者模式(讲解及其实现代码)
java常用设计模式-观察者模式
跟我一起学 设计模式-观察者模式 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软
设计模式--观察者 c++版本 有源码能运行
c++设计模式-行为型模式-观察者模式;qt工程;c++简单源码; 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式...
用c++和lua实现的观察者模式小栗子,其中c++版本参考了别人的实现
设计模式之观察者模式Java版本实现和UML类设计图
观察者模式及实例,适合初学者阅读 。。。。。。。。。。。。。。。
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
设计模式专题之(十八)观察者模式--设计模式观察者模式示例代码(python--c++)
观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
根据《HeadFirst 设计模式》自己操作实现的观察者模式Java代码
http://blog.csdn.net/webwalker/article/details/7246425
Java设计模式-第22章-观察者模式.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~
HeadFirst 设计模式学习笔记2--观察者模式 demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5581769.aspx
ios平台下讲解观察者模式简单代码,可也查看博客对设计模式的简单介绍或者定义http://blog.sina.com.cn/s/blog_161d504630102wxis.html
基于MFC实现的消息监听机制,利用了设计模式中的观察者模式,对线程间的同步做了优化,以及可以选择消息的发送类型:同步或异步发送。对于监听者而言在注册监听的同时可以选择监听的消息类型,避免了发送者发送的...