1
name
, type
등의 메시지를받는 메시지 대기열이 있다고 가정 해 보겠습니다.조건부 통지자가있는 메시지 큐
특정 내용이 포함 된 메시지를 예상하는이 큐의 관찰자 유형에 대한 이름이 있습니까?
if (message.name.equals(observer.wantedName) {
observer.notify();
}
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);
}