一、什么叫观察者
举个例子,比如现在很多的购房者都在关注着房子的价格变化,每当房子价格变化时,所有的购房者都可以观察得到,实际上以上的购房者都属于观察者,他们都关注着房子的价格,这就是 观察者设计模式
在 Java 中可以直接依靠 Observable 类和 Observer 接口实现该功能
二、观察者模式实现
需要被观察的类必须继承Observable 类:Observable 类的常用方法
然后每一个观察者类都需要实现 Observer 接口,Observer 接口定义如下:
public interface Observer{
void update(Observable o,Object arg);
}
该接口中只定义了一个 update 方法,第1个参数表示被观察者实例,第2个参数表示修改的内容。
import java.util.Observable;
import java.util.Observer;
class House extends Observable{//被观察者的类需要继承 Observable 类
private float price;
public House(float price){
this.price = price;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
super.setChanged();//设置变化点
super.notifyObservers(price);//通知所有观察者价格改变
this.price = price;
}
public String toString(){
return "房子价格为:" + this.price;
}
}
class HousePriceObserver implements Observer{//每一个观察者类都需要实现 Observer 接口
private String name;
public HousePriceObserver(String name){
this.name = name;
}
public void update(Observable obj,Object arg){
if (arg instanceof Float){//判断参数类型
System.out.print(this.name + "观察到价格更改为:");
System.out.println(((Float)arg).floatValue());
}
}
}
public class Root{
public static void main(String[] args) {
House h = new House(10000);
HousePriceObserver hp1 = new HousePriceObserver("购房者A");
HousePriceObserver hp2 = new HousePriceObserver("购房者B");
HousePriceObserver hp3 = new HousePriceObserver("购房者C");
h.addObserver(hp1);//加入观察者
h.addObserver(hp2);//加入观察者
h.addObserver(hp3);//加入观察者
System.out.println(h);//输出房子价格
h.setPrice(66666);//修改房子价格
System.out.println(h);//输出房子价格
}
}
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
可以发现多个观察者都在关注着价格的变化,只要价格一有变化,则所有观察者会立刻有所行动。