观察者模式/发布-订阅(Publish/Subscribe) :定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更改自己。
类图:
代码:
publicinterface Observer {
publicvoid update();
}
publicinterface Subject {
publicvoid attach(Observer observer);
publicvoid detach(Observer observer);
publicvoid doNotify();
}
publicclass ConcreteObserver implements Observer {
@Override
publicvoid update() {
System.out.println("更新操作!!");
}
}
publicclass ConcreteSubject implements Subject{
private List<Observer> observers=new ArrayList<Observer>();
@Override
publicvoid attach(Observer observer) {
observers.add(observer);
}
@Override
publicvoid detach(Observer observer) {
observers.remove(observer);
}
@Override
publicvoid doNotify() {
for(Observer temp:observers){
temp.update();
}
}
}
publicstaticvoid main(String[] args) {
Subject subject =new ConcreteSubject();
Observer o1=new ConcreteObserver();
Observer o2=new ConcreteObserver();
subject.attach(o1);
subject.attach(o2);
// subject.detach(o1);
subject.doNotify();
}
优点:一个事件启动多个相应。
缺点:可能有些组件已经进行封装,就不能实现java.util.observer接口了。
Java已经实现了观察者模式,只要实现java.util.observer接口和继承java.util.observable类就O了。