membersname
などを持つメッセージを受信するメッセージキューがあるとしましょうtype
。
このキューに、特定の内容のメッセージを期待するタイプのオブザーバーの名前はありますか?
if (message.name.equals(observer.wantedName) {
observer.notify();
}
membersname
などを持つメッセージを受信するメッセージキューがあるとしましょうtype
。
このキューに、特定の内容のメッセージを期待するタイプのオブザーバーの名前はありますか?
if (message.name.equals(observer.wantedName) {
observer.notify();
}
以下は、問題を解決する方法を疑似コードで示した単なる例です。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);
}