在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会得到通知并自动更新。
Subject 被观察者
能够动态地增加、 取消观察者。管理观察者并通知观察者。
Observer观察者
接收到消息后, 即进行update 操作, 对接收到的信息进行处理。
ConcreteSubject具体的被观察者
定义被观察者自己的业务逻辑, 同时定义对哪些事件进行通知。
ConcreteObserver具体的观察者
每个观察在接收到消息后的处理反应是不同, 各个观察者有自己的处理逻辑。
Observer观察者
/**
* 观察者
*/
public interface Observer {
// 更新方法
void update();
}
ConcreteObserver具体的观察者
/**
* 具体观察者
*/
public class ConcreteObserver implements Observer{
@Override
public void update() {
System.out.println("接受到信息,并进行处理");
}
}
Subject 被观察者
/**
* 被观察者
*/
public abstract class Subject {
// 定义一个被观察者数组
private List<Observer> obsList = new ArrayList<>();
// 增加一个观察者
public void addObserver(Observer observer){
obsList.add(observer);
}
// 删除一个观察者
public void delObserver(Observer observer){
obsList.remove(observer);
}
// 通知所有观察者
public void notifyObservers(){
for (Observer observer : obsList){
observer.update();
}
}
}
ConcreteSubject具体的被观察者
/**
* 具体被观察者
*/
public class ConcreteSubject extends Subject{
// 具体的业务
public void doSomething(){
super.notifyObservers();
}
}
使用示例
public class ObserverClient {
public static void main(String[] args) {
// 创建一个被观察者
ConcreteSubject subject = new ConcreteSubject();
// 定义一个观察者
Observer observer = new ConcreteObserver();
// 观察者观察被观察者
subject.addObserver(observer);
subject.doSomething();
}
}