设计模式之观察者模式
# 设计模式之观察者模式
# 一、简介
当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它是一种基于事件和响应的设计模式,定义了对象之间一对多的依赖关系
# 二、实现方式
抽象被观察者(Subject):持有观察者对象的集合
//被观察者 abstract public class Subject { private List<Observer> observerList = new ArrayList<Observer>(); public void attachObserver(Observer observer) { observerList.add(observer); } public void detachObserver(Observer observer){ observerList.remove(observer); } public void notifyObservers(){ for (Observer observer: observerList){ observer.update(); } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15具体被观察者(ConcreteSubject)
public class ConcreteSubject extends Subject{ void move(){ System.out.println("发布事件"); notifyObservers();//通知 } }
1
2
3
4
5
6抽象观察者(Observer)
//观察者 public interface Observer { public void update(); }
1
2
3
4具体观察者(ConcreteObserver)
public class ConcreteObserver implements Observer { @Override public void update() { if(isSupport()){ System.out.println("处理事件!"); } } private boolean isSupport(){ //判断是否为想要的事件 return true; } }
1
2
3
4
5
6
7
8
9
10
11
12测试类
public static void main(String[] args) { //初始化对象 ConcreteObserver concreteObserver = new ConcreteObserver(); ConcreteSubject concreteSubject = new ConcreteSubject(); concreteSubject.attachObserver(concreteObserver); //发布事件 concreteSubject.move(); }
1
2
3
4
5
6
7
8
# 三、应用场景
# 1、spring的事件机制就是基于观察者模式
- 事件多播器(ApplicationEventMulticaster ) 相当于被观察者
- 监听器(ApplicationListener) 相当于观察者