观察者模式,也叫发布订阅模式。
定义对象间的一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖它的对象都得到通知并被自动更新。
何时使用
- 当一个对象的数据更新时,需要通知其他对象,而又不希望和被通知的对象形成紧耦合时
首先定义观察者的接口
/*
观察者
*/
public interface Observer {
void update(); // 更新方法
}
定义被观察者
/*
被观察者
*/
public abstract class Subject {
//定义一个观察者数组
private Vector<Observer> observerVector = new Vector<Observer>();
//增加一个观察者
public void addObserver(Observer o){
this.observerVector.add(o);
}
//删除一个观察者
public void deleteObserver(Observer o ){
this.observerVector.remove(o);
}
//通知所有的观察者
public void notifyObservers(){
for (Observer observer: observerVector) {
observer.update();
}
}
}
具体的观察者实现
public class ConcreteObserver implements Observer {
public void update() {
System.out.println("接收到来自被观察者的信息,进行处理");
}
}
被观察者实现
/*
具体被观察者
*/
public class ConcreteSubject extends Subject {
//实际的业务
public void doSth(){
System.out.println("被观察者的doSth方法执行了");
super.notifyObservers();
}
}
测试
public class ObserverClient {
public static void main(String[] args) {
//创建一个被观察者
ConcreteSubject subject = new ConcreteSubject();
//定义一个观察者
Observer observer = new ConcreteObserver();
//观察者观察
subject.addObserver(observer);
//被观察者活动
subject.doSth();
}
}