三、 具体实例
被观察目标类继承java.util.Observable
使用java的Observer模式时,在通知之前一定要调用this.setChanged()方法。
然后主动调用通知方法 推模式方法:this.notifyObservers(Object obj);将被观察目标的被观察的属性传递给观察者。 拉模式方法:this.notifyObservers();将被观察目标的对象传递给观察者。
观察者类实现java.util.Observer接口,并复写其中的update方法。
使用时需要添加观察者
Observable obj = new subObser();//继承Observable的子类 subObser.addObserver(observerImpl);//加入实现了Observer接口的观察者实现类四、观察者的优缺点
优点:
观察者模式实现了观察者和目标之间的抽象耦合;观察者模式实现了动态联动;观察者模式支持广播通信;缺点:可能会引起无谓的操作
建议在以下情况中选用观察者模式
第一 当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化;第二 如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要被连带改变。第三 当一个对象必须通知其他的对象,但是你又希望这个对象和其他被它通知的对象是松散耦合的。