转载

说说设计模式~ 观察者模式与消费者模式的区别

再说概念

这两个模式确实有点相似,都为了实现程序的解耦产生的,观察者一般又称发布/订阅模式,它一般是有一个主题对象,然后有多个订阅者去关注它,当它的状态发生变化时,会自动通知这些订阅者;而消费者模式类似一个缓存队列的概念,它也称为生产者/消费者模式,生产者只负责生产数据不去做处理(缓解高并发的问题),而消费者只从消费中间件里拿到所要处理的数据,并进行相应的逻辑处理工作,生产者与消费者是相互不知道对方的存在的,或者说他们可以是不同平台的,不同语言的,即解耦的!

图像中的消费者模式

说说设计模式~ 观察者模式与消费者模式的区别

图像中的观察者模式

说说设计模式~ 观察者模式与消费者模式的区别

而对于分布式的观察者模式,也有比较直观的图像

说说设计模式~ 观察者模式与消费者模式的区别

在实际应该中,我们也会把观察者(发布/订阅)做成多个发布,一个订阅的变态模式,当然,大叔认为他们是可以 多对多 的。

说说设计模式~ 观察者模式与消费者模式的区别

观察者模式与消费者模式的区别

订阅者肯定是个消费者,但消费者不一定是订阅者,发布者一定是个生产者,但生产者不一定是个发布者。

订阅发布者模式有时也称为观察者模式,订阅发布者(观察这和被观察者)存在着主动 被动的关系,而生产者消费者比较中性吧。 订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变 化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。而生产者消费者关系可以是1对1,1对多,多对1,多对多关系

在23种设计模式中的 观察者模式中,并没有中间介-队列的概念 ,但 生产者消费者模式再多线程环境下好像天生就有队列的 概念。在 订阅发布者之间引入消息队列后,可以实现 订阅者和发布者之间的解耦,任务可以很好的以异步方式进行处理,所以说是否有中间队列不是 订阅发布者模式和 生产者消费者模式的区别!

返回目录

原文  http://www.cnblogs.com/lori/p/5413369.html
正文到此结束
Loading...