我们就用一个实际的例子来引入观察者模式:最常见的例子可能就是天气预报,观察对象是地球,观察者是气象卫星, 客户端是气象局。
------观察对象是地球------
import java.util.Observable;
public class Earth extends Observable{
private String weather="晴朗";
public String getWeather(){
return this.weather;
}
public void setWeather(String weather){
this.weather=weather;
setChanged();
notifyObservers(weather);
}
}
------观察者是气象卫星------
import java.util.Observable;
import java.util.Observer;
public class Satellite implements Observer {
private String weather;
@Override
public void update(Observable arg0, Object arg1) {
// TODO Auto-generated method stub
this.weather=(String)arg1;
System.out.println("最近天气变化"+this.weather);
}
}
------ 客户端是气象局------
public class WeatherService {
public static void main(String args[]){
Earth earth=new Earth();
Satellite satellite=new Satellite();
earth.addObserver(satellite);
System.out.println("天气预报");
System.out.println("-------");
earth.setWeather("台风逼近");
earth.setWeather("大到暴雨");
earth.setWeather("天气炎热");
}
}
运行结果:
天气预报
-------
最近天气变化:台风逼近
最近天气变化:大到暴雨
最近天气变化:天气炎热
通过上述例子我们可知:
Earth类继承了Observable类成为了被观察者,Observable的常用方法: void java.util.Observable.setChanged(), void java.util.Observable.notifyObservers(Object arg),void java.util.Observable.addObserver(Observer o)等等,即实现了“设置变化点”,“通知观察者”和“注册观察者”的功能。
Satellite类实现了Observer接口成为了观察者,实现了void update(Observable arg0, Object arg1),即当被观察者调用notifyObservers(Object arg)通知观察者时,观察者自动调用updata(Observable arg0,Object arg1)呈现已更新的数据。参数Observable arg0是之前注册自己的被观察者,参数Object arg1是notifyObservers(Object arg)的参数。
其实观察者模式有一个弊端,就是被观察者需要继承Observable类,但是如果被观察者之前已经继承了一个类的话就不能再继承Observable类了。此时,就需要我们自己设计观察模式了O(∩_∩)O~~~
分享到:
相关推荐
java观察者模式观察者模式java观察者模式观察者模式java观察者模式观察者模式
Java 观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者...
一个很简单但是明了的java观察者模式的demo。备注几乎每行都加了。
设计模式----观察者模式demo,使用java自带的工具类,实现,后面会上传一个完全自己代码实现的demo
这是以生活中网购为例,详细讲述了Java观察者模式,详情见http://blog.csdn.net/u012810020/article/details/50526586
开发中常用 设计模式 开发者模式,欢迎大家学习。 博客:http://blog.csdn.net/q610098308/article/details/76143959
java观察者模式的实例代码。从最简单的实例开始,到观察者模式。有什么问题可以加扣扣共同探讨
观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,这个例子是java内置观察者模式
观察者模式实例,用到java的继承,多态,加深概念理解.
利用气象站监测的例子详细介绍观察者模式的使用方法,具体介绍观察者模式的所适应的场景情况
设计模式的分类,Java代码中使用观察者模式的案例以及文档
在设计一组依赖的对象与它们所依赖的对象之间一致(同步)的交流模型时,观察者模式(Observer Pattern)很有用。它可以使依赖对象的状态与它们所依赖的对象的状态保持同步。这组依赖的对象指的是观察者(Observer)...
用java实现的观察者模式,共需要的人学习,如果有不对的地方也请指出
Java设计模式的观察者模式讲解,可以由浅入深了解观察者模式的应用。
一个以报社、读者为例子的经典观察者模式demo。
Java线程池及观察者模式解决多线程意外死亡重启问题,附件含两个要运行代码!
观察者设计模式,java语言实现,完全自己代码实现,未使用observable和observer
java-观察者模式(Observe)