很明显这个模式中有两个对象:observer(观察者) observable (被观察者)
(1) observer是接口,observable是抽象类。
比如我要观察一个商品bean,这个商品类可以继承Observerable如下:
public class ProductBean extends Observable{ private String name; private float price; public ProductBean() { super(); } public ProductBean(String name, float price) { super(); this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; setChanged(); // 设置changed = true; notifyObservers(); // 通知所有的观察者 } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; setChanged(); notifyObservers(); } @Override public String toString() { return "ProductBean [name=" + name + ", price=" + price + "]"; }
(2)再定义一个观察者,如下:
public class MyObserver implements Observer{ private ProductBean observable; @Override public void update(Observable o, Object arg) { observable = (ProductBean)o; System.out.println(observable.toString()); } }
(3)现在观察者和被观察者都有了,那么他们是怎样通信的呢?
是这样的:
public class MainTest { public static void main(String[] args) { ProductBean observable = new ProductBean(); MyObserver observer = new MyObserver(); observable.addObserver(observer); observable.setName("name2"); // System.out.println(); } }
其实就是调用observerable的addObserver(Observer observer)这样观察者和被观察者就联系了起来。被观察者数据一发生变化之后就会调用observer的update()。