5

私のアプリケーション層/ビューには、黒板とも呼ばれるイベント ディスパッチ システムがあります。リスナーはハッシュマップによって格納され、キーは列挙型 EventType として実装されたイベント タイプであり、値はこのイベント タイプをリッスンするリスナー参照です。たとえば、モデル オブジェクトがイベント タイプ「LOCAL_PLAYER_INPUT」をリッスンしている場合、プレーヤーは EventHandler インターフェイスを実装しているため、黒板は処理し、プレーヤーに通知します。

モデルにスタンドアロンの黒板を実装することで、モデルをさらに分離したいと考えています。アプリケーション層はキーボードまたはタッチから I/O を取得するため、アプリケーション層ブラックボードにリスナーとして追加されます。その後、モデル黒板自体がイベントをさらに委任します。このために、イベントが次のように分類される列挙階層を作成したいと考えました。

MODEL.LOCAL.PLAYER_INPUT

モデルは、次のように MODEL を渡すことによってのみ、ビューの黒板にリスナーとして登録されます。

addListener(model.blackboard, MODEL); //Types: (EventHandler, EventType)

私が達成した列挙型とインターフェースを組み合わせることで、MODEL.XY のようなイベントタイプを記述できますが、MODEL は EventType インターフェースを実装していますが、addListener によって受け入れられません。

私は何をすべきか?

編集: いくつかのコード

addListener メソッド:

    public void addListener(EventHandler handler, EventType eventType) {
    getListener(eventType).add(handler);}


private Array<EventHandler> getListener(EventType eventType) {
    if(map.containsKey(eventType))
        return map.get(eventType);
    else {
        Array<EventHandler> tmp = new Array<EventHandler>(false, 1, EventHandler.class);
        map.put(eventType, tmp);
        return tmp;
    }

}

列挙型:

public interface WL extends EventType {

public static enum LOCAL {
    PLAYER_INPUT,
    NPC_INPUT
}

}

ゲームイベント:

    public GameEvent(EventType eventType, Object message) {
    this.eventType = eventType;
    this.message = message;
    timeStamp = System.currentTimeMillis();

}
4

1 に答える 1