假设我有一个消息队列,它接收具有 members 的消息name
,type
依此类推。
此队列上是否有一种类型的观察者的名称,它需要具有特定内容的消息?
if (message.name.equals(observer.wantedName) {
observer.notify();
}
假设我有一个消息队列,它接收具有 members 的消息name
,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);
}