本文通过下述三种方式实现观察者模式:
- 基于自定义实现
- 基于JAVA API实现
- 基于Sring Event实现
注意:出于区分目的,下述代码部分命名并不符合常规Java开发规范
基于自定义实现方式
定义观察者(observer)与被观察者(subject/observable)接口
//定义被观察者(subject/observable)接口
public interface Subject {
void attachObserver(Observer observer);
void detachObserver(Observer observer);
void notifyObservers(String event);
}
//定义观察者(observer)接口
public interface Observer {
void update(String event);
}
定义观察者(observer)与被观察者(subject/observable)接口
//实现被观察者(subject/observable)接口
@Service
public class BaseSubject implements Subject {
private final List<Observer> observersList = new LinkedList<>();
@Override
public void attachObserver(Observer observer) {
observersList.add(observer);
}
@Override
public void detachObserver(Observer observer) {
observersList.remove(observer);
}
@Override
public void notifyObservers(String event) {
this.observersList.forEach(ob -> ob.update(event) );
}
}
创建多个observer Bean用于测试
@Configuration
public class MultiBaseObserverConf {
@Bean("baseObserverA")
public BaseObserver buildBaseObserverA(){
return new BaseObserver("BaseObserverA");
}
@Bean("baseObserverB")
public BaseObserver buildBaseObserverB()