1

membersnameなどを持つメッセージを受信するメッセージキューがあるとしましょうtype

このキューに、特定の内容のメッセージを期待するタイプのオブザーバーの名前はありますか?

if (message.name.equals(observer.wantedName) {
  observer.notify();
}
4

1 に答える 1

1

以下は、問題を解決する方法を疑似コードで示した単なる例です。MessageQueue には、メッセージ タイプをキーとするハッシュ テーブルと、このメッセージ タイプのリスナーを含む値の配列があります。また、条件を説明する追加の引数が必要にYourMessageQueue:observe()なります。

class YourMessageQueue extends /* or implements */ EventDispatcher {

    function addMsg(msg) {
        foreach(this.listeners[msg.type] as listener) {
            listener.notify(msg, this);
        }
    }
}


class YourObserver implements Observer {

    function createMesssageQueue() {
        msgq = new MessageQueue();
        msgq.addObserver(this, 'foo');
    }
}


class EventDispatcher {

    protected hashtable observers;

    function addObserver(Observer observer, string eventType) {
        this.observers[eventType].push(observer);
    }
}


interface Observer {

    function notify($data, $sender);
}
于 2012-12-29T20:31:05.473 に答える