Ответ 1
Когда вы делите проект на логические части (например, с помощью MVP), иногда приходится связываться с разными частями. Типичное сообщение отправляет изменения статуса, например:
- пользователь вошел в систему/вышел из системы.
- пользователь перемещается напрямую через URL-адрес на страницу, чтобы меню было обновлено.
В этом случае использование логики событий вполне логично.
Чтобы использовать его, вы создаете экземпляр одного EventBus для каждого приложения, которое затем используется всеми другими классами. Для этого используйте статическое поле, factory или инъекцию зависимостей (GIN в случае GWT).
Пример с собственными типами событий:
public class AppUtils{
public static EventBus EVENT_BUS = GWT.create(SimpleEventBus.class);
}
Обычно вы также создаете собственные типы событий и обработчики:
public class AuthenticationEvent extends GwtEvent<AuthenticationEventHandler> {
public static Type<AuthenticationEventHandler> TYPE = new Type<AuthenticationEventHandler>();
@Override
public Type<AuthenticationEventHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(AuthenticationEventHandler handler) {
handler.onAuthenticationChanged(this);
}
}
и обработчик:
public interface AuthenticationEventHandler extends EventHandler {
void onAuthenticationChanged(AuthenticationEvent authenticationEvent);
}
Затем вы используете его следующим образом:
AppUtils.EVENT_BUS.addHandler(AuthenticationEvent.TYPE, new AuthenticationEventHandler() {
@Override
public void onAuthenticationChanged(AuthenticationEvent authenticationEvent) {
// authentication changed - do something
}
});
и запустите событие:
AppUtils.EVENT_BUS.fireEvent(new AuthenticationEvent());