2012-12-29 73 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); 
}