【问题标题】:Message queue with conditional notifyer带有条件通知者的消息队列
【发布时间】:2012-12-14 16:02:33
【问题描述】:

假设我有一个消息队列,它接收具有成员nametype 等的消息。

此队列中是否有一种类型的观察者的名称,它需要具有特定内容的消息?

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

【问题讨论】:

    标签: data-structures terminology message-queue


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2020-08-10
      • 2015-08-22
      • 2011-10-30
      • 1970-01-01
      • 2012-07-01
      相关资源
      最近更新 更多