2012-12-29 113 views
1

可以說我有一個消息隊列,它接收具有成員name,type等等的消息。有條件notifyer的消息隊列

在這個隊列中有一個類型的觀察者的名字是否需要一個帶有特定內容的消息?

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