观察者模式
观察者模式
观察者模式(Observer Design Pattern):在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会得到通知并自动更新。
观察者模式通用代码
/**
* 观察者
*/
public interface Observer {
// 更新方法
void update();
}
/**
* 具体观察者
*/
public class ConcreteObserver implements Observer{
@Override
public void update() {
System.out.println("接受到信息,并进行处理");
}
}
/**
* 被观察者
*/
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();
}
}
}
/**
* 具体被观察者
*/
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();
}
}
观察者模式优点
①、观察者和被观察者之间是抽象耦合
不管是增加观察者还是被观察者都非常容易扩展,在系统扩展方面会得心应手。
②、建立一套触发机制
被观察者变化引起观察者自动变化。但是需要注意的是,一个被观察者,多个观察者,Java的消息通知默认是顺序执行的,如果一个观察者卡住,会导致整个流程卡住,这就是同步阻塞。
所以实际开发中没有先后顺序的考虑使用异步,异步非阻塞除了能够实现代码解耦,还能充分利用硬件资源,提高代码的执行效率。
另外还有进程间的观察者模式,通常基于消息队列来实现,用于实现不同进程间的观察者和被观察者之间的交互。
观察者模式应用场景
①、关联行为场景。
②、事件多级触发场景。
③、跨系统的消息交换场景, 如消息队列的处理机制。

浙公网安备 33010602011771号