2012-12-29 3 views
1

name, type 등의 메시지를받는 메시지 대기열이 있다고 가정 해 보겠습니다.조건부 통지자가있는 메시지 큐

특정 내용이 포함 된 메시지를 예상하는이 큐의 관찰자 유형에 대한 이름이 있습니까?

if (message.name.equals(observer.wantedName) { 
    observer.notify(); 
} 

답변

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); 
}