1

假设我有一个消息队列,它接收具有 members 的消息nametype依此类推。

此队列上是否有一种类型的观察者的名称,它需要具有特定内容的消息?

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 回答