定義:
責任鏈模式重點在於鏈上,可以在發生者和處理者之間解耦,使事件在鏈上傳遞,直到有一個類處理了這個事件。
在工作中,我們跟觀察者模式混用在一起,
處理方法實現對應的接口,在spring中可以加入@Order定義加載順序
觀察者:
@Component
public class XEventDispatch implements Observer {
@Autowired
private List<XEventCustomer>xEventCustomers;
public void update(Observable source, Object arg) {
//事件的源頭
X x = (X) arg;
//事件
XEvent event = (XEvent) source;
//責任鏈變種
for (XEventCustomer xEventCustomer : xEventCustomers) {
if (xEventCustomer.getStatus().getCode() == event.getType().getCode()) {
xEventCustomer.exec(event);
return;
}
}
}
}
被觀察者:
public class XEvent extends Observable {
private XEventDispatch xEventDispatch;
//事件起源
private X source;
//事件的類型
private PublicClassInfoStatusEnum type;
//傳入事件的源頭,默認爲新建類型
public SmallClassEvent(SmallClass smallClass, SmallClassEventDispatch smallClassEventDispatch) {
this(smallClass, smallClassEventDispatch, PublicClassInfoStatusEnum.CREATE);
}
//事件源頭以及事件類型
public XEvent(X p, XEventDispatch xEventDispatch, StatusEnum type) {
this.xeventDispatch = xEventDispatch;
this.source = p;
this.type = type;
//事件觸發
this.notifyEventDispatch();
}
//通知事件處理中心
private void notifyEventDispatch() {
super.addObserver(xEventDispatch);
super.setChanged();
super.notifyObservers(source);
}
}