定义
监听器模式是观察者模式的一种实现:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法。
角色
- 事件源:提供订阅与取消监听器的方法,并负责维护监听者列表,发送事件给监听者。
- 事件对象:事件类型,同时包装事件源。
- 监听器:每一个监听器实现接口来接收事件,并负责从事件源订阅与取消订阅。
类图
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
public class EventSource {
private List<ConcreteEventListener> eventListeners = new ArrayList<>();
public void action() { eventListeners.forEach(eventListener -> eventListener.onEvent(new ConcreteEventObject(this))); }
public void addEventListener(ConcreteEventListener eventListener) { this.eventListeners.add(eventListener); }
public void removeEventListener(ConcreteEventListener eventListener) { this.eventListeners.remove(eventListener); }
public List<ConcreteEventListener> getEventListeners() { return eventListeners; }
public void setEventListeners(List<ConcreteEventListener> eventListeners) { this.eventListeners = eventListeners; } }
public class ConcreteEventObject extends EventObject {
public ConcreteEventObject(EventSource source) { super(source); } }
public class ConcreteEventListener implements EventListener {
void onEvent(ConcreteEventObject event) { System.out.println(String.format("response event of %s", event.toString())); } }
|
模式应用
Spring Boot
在Spring Boot启动过程中,会组播一系列事件,这些事件的触发及响应就用到了监听器模式。