【发布时间】:2012-12-14 16:02:33
【问题描述】:
假设我有一个消息队列,它接收具有成员name、type 等的消息。
此队列中是否有一种类型的观察者的名称,它需要具有特定内容的消息?
if (message.name.equals(observer.wantedName) {
observer.notify();
}
【问题讨论】:
标签: data-structures terminology message-queue
假设我有一个消息队列,它接收具有成员name、type 等的消息。
此队列中是否有一种类型的观察者的名称,它需要具有特定内容的消息?
if (message.name.equals(observer.wantedName) {
observer.notify();
}
【问题讨论】:
标签: data-structures terminology message-queue
以下只是伪代码中如何解决问题的示例。 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);
}
【讨论】: