下面看看Controller的部分代码
/**
* Registers the event type.
*
* @param types the event types
*/
protected void registerEventTypes(EventType... types) {
if (supportedEvents == null) {
supportedEvents = new ArrayList<EventType>();
}
if (types != null) {
for (EventType type : types) {
if (!supportedEvents.contains(type)) {
supportedEvents.add(type);
}
}
}
}
/**
* Determines if the controller can handle the particular event. Default
* implementation checks against registered event types then queries all child
* controllers.
*
* @param event the event
* @return <code>true</code> if event can be handled, <code>false</code>
* otherwise
*/
public boolean canHandle(AppEvent event) {
if (supportedEvents != null && supportedEvents.contains(event.getType())) return true;
if (children != null) {
for (Controller c : children) {
if (c.canHandle(event)) return true;
}
}
return false;
}
这里有贴了2个方法,一个是registerEventTypes(),表示注册事件。
如果我们要对初始化事件INIT进行处理,我们要先注册这个事件registerEventTypes(INIT);
那么当这个事件发生时,Controller就会接收到,可以进行相应的处理.
canHandle这个方法就是判断能否处理的,当你注册INIT事件后,他会把这个INIT对象放进supportedEvents 里面,canHandle里面迭代这个集合,如果存在,返回true表示需要处理,如果不存在,返回false表示不需要处理。
回头再看之前的Dispatcher类里面的dispatch方法,他会迭代controllers这个集合,调用它们的canHandler()方法,如果需要处理,则调用controller的handleEvent方法来处理。
为了把我们自己的controller添加到Dispathcer的controllers里面,我们还需要调用以下方法:
/**
* Adds a controller.
*
* @param controller the controller to be added
*/
public void addController(Controller controller) {
if (!controllers.contains(controller)) {
controllers.add(controller);
}
}
Dispathcher.get().addController(controller);