举个例子
例如现在房地产调控比较严格,很多购房者都在关注着房子的价格变化,每当房子价格变化时,所有的购房者都可以观察得到。实际上以上的购房者都属于观察者,他们都在关注着房子的价格。这个观察变化的过程就可以成为观察者模式。
如果实现观察模式
在 Java 中可以直接依靠类 Observable 和 接口 Observer实现以上观察者模式的功能。在Java 应用中,需要被观察的类必须继承于 Observable 类。每个观察者类都需要实现 Observer 接口,其定义如下:
1 2 3 4
| public interface Observer{ void update(Observable o, Object arg) }
|
代码实例
1 2 3 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| import java.util.Observable; import java.util.Observer;
class House extends Observable{ private float price; public House(float price) { this.setPrice(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{ private String name; public HousePriceObserver(String name) { this.name = name; }
@Override public void update(Observable o, Object arg) { if(arg instanceof Float){ System.out.println(this.name+" 观察到价格更改为:" + arg); } } }
public class TestObserve { public static void main(String[] args) { House h = new House(100000); HousePriceObserver hpo1 = new HousePriceObserver("购房者 A"); HousePriceObserver hpo2 = new HousePriceObserver("购房者 B"); HousePriceObserver hpo3 = new HousePriceObserver("购房者 C"); h.addObserver(hpo1); h.addObserver(hpo2); h.addObserver(hpo3); System.out.println(h); h.setPrice(600000); System.out.println(h); } }
|
控制台输出
房价为:100000.0
购房者 C 观察到价格更改为:600000.0
购房者 B 观察到价格更改为:600000.0
购房者 A 观察到价格更改为:600000.0
房价为:600000.0