すべての応答に感謝します。Zakness は、私が必要としていた答えを得るのに最も近かったのですが、少し単純なモデルを思いつきました。
私の主な目標は、メインのデータ構造に静的変数を使用しないようにすることでした。また、アクセスしようとしたときにメインのデータ構造がデータベースから正常に取得されたかどうか、そうでない場合 (つまり、null の場合) に何をすべきかを把握しようとする問題にも遭遇しました。
Google Web Toolkit Architecture: Best Practices For Architecting Your GWT Appビデオ (Google IO から)を見た後、イベント バスのアイデアは完璧に思えました。
他の人に役立つ場合に備えて、ここに私のソリューションを投稿します。
まず、Handler クラスを作成します。Event クラスへの参照に注意してください。
public interface CategoryChangeHandler extends EventHandler {
void onCategoryChange(CategoryChangeEvent event);
}
次に、Event クラスに進みます。これは私に最も問題を引き起こしました:
public class CategoryChangeEvent extends GwtEvent<CategoryChangeHandler> {
private final List<Category> category;
public CategoryChangeEvent(List<Category> category) {
super();
this.category = category;
}
public static final Type<CategoryChangeHandler> TYPE = new Type<CategoryChangeHandler>();
@Override
protected void dispatch(CategoryChangeHandler handler) {
handler.onCategoryChange(this);
}
@Override
public com.google.gwt.event.shared.GwtEvent.Type<CategoryChangeHandler> getAssociatedType() {
return TYPE;
}
public List<Category> getCategories(){
return category;
}
}
これで、このメイン データ構造がリロードされたときに、これらの Handler クラスと Event クラスを次のように使用できるようになりました。
このコードはデータ構造を取得し、それが更新されたことをリッスンしているすべての人に通知したいと考えています。
CategoryChangeEvent event = new CategoryChangeEvent(result);
eventBus.fireEvent(event);
このコードはイベントの実装です
public class PopulateCategoryHandler implements CategoryChangeHandler {
@Override
public void onCategoryChange(CategoryChangeEvent event) {
tearDownCategories();
List<Category> categories = event.getCategories();
populateCategories(categories);
}
}