Banq,请教一下关于异步事件监听模式

09-12-11 0lhw0
    

您曾经说过:”事件监听异步模式在Source和Listener之间引入event queue,

event queue是一个基于事件的publish-subscribe. 它一种松耦合方式提供不同模块和角色之间异步通讯。它比同步更加松耦合,这样,我们就把Source-Listener改成了publish-queue-subscribe方式。“

能解释一下那个event queue这个的作用,有点不太清楚,这个队列怎么和Source,Listener关联。能不能用一点代码解释一下。

    

1
banq
2009-12-11 14:29

public class QueueMessageProcessor  {
	private LinkedBlockingQueue queue;

	public QueueMessageProcessor() {
		queue = new LinkedBlockingQueue();
	}

        //publisher调用本方法
	public void addMessage(Object o) {
		queue.add(o);
	}

        //subscriber调用本方法
	public Object getMessage() {
		try {

        		return queue.take();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}


<p>

IceQi
2009-12-13 00:10

LZ这个queue的核心作用是彻底分割source 和 listener。由于和他们直接沟通的对象变成了queue这样就没有人需要关心“我的数据给谁”和“谁给我提供数据”这样的问题了。

在做系统设计的时候“除非必要,什么都不要知道,什么都不要假设”是一个基本的原则。

0lhw0
2009-12-14 16:43

谢谢banq的指点,豁然开朗。

感谢IceQi。

这个event queue扮演的就是那个中介者的角色,将Source和Listener关联起来。

to--IceQi

在做系统设计的时候“除非必要,什么都不要知道,什么都不要假设”是一个基本的原则。

这应该就是那个著名的”不要和陌生人说话“--迪米特原则吧。