1.什么是观察者模式 简单情形:有A、B、C、D等四个独立的对象,其中B、C、D这三个对象想在A对象发生改变的第一时间知道这种改变,以便做出相应的响应或者对策。
上面的这种情形,就是观察者模式。
当然可以有多个观察者,多个被观察者。
观察者与被观察者也不是对立的,一个对象可以观察其他对象,也可以被其他对象观察。 2、观察者模式的实现 举个例子:出版社跟读者,出版社发布了新书到的消息,订阅了出版社消息的读者就会收到消息。在这里出版社就是被观察者,读者就是观察者。 代码实现: 观察者:
public class Render implements Observer { @Override public void update(Observable o, Object arg) { System.out.print("观察者收到通知---》"+arg.toString()); } }被观察者
public class Pusher extends Observable { public void notifyChange() { super.setChanged(); } }测试类
public class ObserverTest { public static void main(String[] args) { // TODO Auto-generated method stub Pusher publisher = new Pusher (); Reader reader1 = new Reader(); Reader reader2 = new Reader(); publisher.addObserver(reader1); publisher.addObserver(reader2); publisher.setData(); publisher.notifyObservers("收到图书"); System.out.println("ObserverCount:" + publisher.countObservers()); } }结果
Observable:class observerTest.Publisherget:收到图书 Observable:class observerTest.Publisherget:收到图书 ObserverCount:23、总结: 这种设计模式,其实我们可以理解为回调。 实现回顾: 1、观察者实现Observer 2、被观察者继承Observable (并且提供更新的方法) 3、创建观察者、被观察者 被观察者.addObserver(观察者) 被观察者更新状态 被观察者notifyObservers