观察者模式
描述
场景:
当某个事件发生后,一些类需要对该事件进行响应(我们称为观察者)。
public class Client{
public void func(){
//...
//事件发生
if(event.success){
//观察者类对事件进行响应
classA.responseEvent();
classB.responseEvent();
//...
}
}
}
这样写会非常麻烦,若事件在其他代码里面也会发生,那么当需要增删观察者时,就要改很多地方。此时,观察者模式发挥作用。
代码实现示例
我们可定义一个“观察者注册中心”类,维护观察者列表;当事件发生后,由该注册中心统一通知观察者去响应。
/**观察者注册中心**/
public class MyObservable extends Observable{
List<Observer> list;
boolean isChange;
/**添加观察者**/
void addObserver(Observer o){
}
/**通知观察者**/
void notifyObservers(Object arg){
}
/**设置修改标志,当标志改变时,才通知观察者**/
void setChange(){
}
}
/**观察者**/
public class MyObserver extends Observer{
void update(Observable o,Object arg){
//...
}
}
其中,Observable和Observer都是JAVA提供的观察者模式的API。