- 抽象被观察者
public abstract class AbstractObservable {
//观察者列表
private List<IObserver> observerList = new ArrayList<>();
//添加观察者
public void addObservable(IObserver observer) {
this.observerList.add(observer);
}
//删除观察者
public void deleteObservable(IObserver observer) {
this.observerList.remove(observer);
}
//通知所有观察者
public void notifyObservers(String content) {
for (IObserver observer : this.observerList) {
observer.update(content);
}
}
//业务逻辑处理
public abstract void doSomething();
}
- 具体被观察者角色
public class ConcreteObservable extends AbstractObservable {
@Override
public void doSomething() {
//通知观察者
super.notifyObservers("通知观察者");
}
}
- 观察者接口或抽象类
public interface IObserver {
//观察者更新状态
void update(String content);
}
- 观察者接口或抽象类实现类
public class ConcreteObserver implements IObserver {
@Override
public void update(String content) {
//收到被观察者发来的消息
}
}
- 场景使用
//定义观察者与被观察者
IObserver observer = new ConcreteObserver();
AbstractObservable observable = new ConcreteObservable();
//添加到被观察者之中
observable.addObservable(observer);
//事件触发
observable.doSomething();