观察者设计模式需要以下两个程序类和接口:
- 观察者:Observer接口,该类有一个方法update,当该方法执行后,观察者就会进行相应的响应。
- 被观察者: Observable类。
范例:实现观察者的一个完整的例子
一群人关注着房价,当房价下跌的时候,不会接到通知,也就不会进行反馈;而一旦房价上升,他们就会被“被观察者”唤醒,从而检测到更新,并进行对应的反馈。
import java.util.Observable;
import java.util.Observer;
/***
* 实现一个观察者模式的示例代码
*/
class Person implements Observer{ // 实现观察者
@Override
public void update(Observable o, Object arg) { //两个参数分别代表:被观察者实例,被观察者通知观察者,变更的内容是什么?
if(o instanceof House){ //如果接到的是被观察者的通知
System.out.println("【已经观察到了房价的上涨】,新价格为:"+arg);
}
}
}
class House extends Observable{ //实现被观察者
private double price;
public House(double price) {
this.price = price;
}
public double getPrice() {
return price;
}
public void setPrice(double price) { //当房价上涨,刷新对观察者的更新
if(price>this.price){
super.setChanged();
super.notifyObservers(price); // 把最新的观察者内容发送过去,通知到观察者
}
this.price = price;
}
}
public class ObserverDemo {
public static void main(String args[]){
// 创建几个观察者对象实例
Person perA = new Person();
Person perB = new Person();
Person perC = new Person();
//创建一个被观察者对象实例
House house = new House(30000.00);
//绑定观察者和被观察者之间的关系
house.addObserver(perA);
house.addObserver(perB);
house.addObserver(perC);
// 设置观察的触发条件
System.out.println("=============房价下跌,不会通知观察者的....========================");
house.setPrice(24000.00);
System.out.println("=============房价上涨,观察者能够检测到更新并进行输出反馈....========================");
house.setPrice(34000.00);
}
}
上述实例的输出信息为:

观察房价的涨跌
总结
这里的观察者模式是JDK1.0开始就提供的一种设计模式的实现,现在的开发中很少使用了。但是,作为一种很好的设计模式思路,可以帮助我们进行设计模式的入门和理解。