java中生产消费者模式和观察者模式有啥区别

小编 510

java中生产消费者模式和观察者模式有以下区别:1.概念不同;2.编程范式不同;3.线程执行上不同;4.对应关系不同;5.应用场景不同。概念不同是两者最本质的区别,生产消费者模式就是一个多线程并发协作的模式,而观察者模式是一种对象行为模式。

1.概念不同

生产消费者模式就是一个多线程并发协作的模式。在这个模式中,一部分线程被用于去生产数据,另一部分线程去处理数据,于是便有了形象的生产者与消费者了。

观察者模式是一种对象行为模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

2.编程范式不同

生产者消费者模式本身并不属于设计模式中的任何一种;而观察者模式属于Gang of Four提出的23种设计模式中的一种,也是面向对象的设计模式中的一种。

3.线程执行上不同

生产者消费者模式中,生产者和消费者的方法的执行处于不同的线程,中间通过队列通信;而观察者模式中,被观察者和观察者的所有方法的执行都在同一个线程中。

4.对应关系不同

在生产者-消费者模式中则是多对多的关系,即生产者可以有多个,消费者也可以有多个。生产者和消费者就如同一本杂志的投稿作者和订阅的读者,同一本杂志的投稿作者可以有多个,它的读者也可以有多个。

而在观察者模式中,没有多对多的关系,只有一对多的关系。因为,被观察者只有一个,即观察的对象是固定少数的,而观察者却可以有多个。

5.应用场景不同

生产者-消费者模式则多出现在进程间通信,用于进行解耦和并发处理,我们常用的消息队列用的就是生产者-消费者模式。当然在Java中使用生产者-消费者模式还需要注意缓冲区的线程安全问题。

观察者模式没有中间介-队列的概念,被观察者需要维护观察者的信息以便事件发生时能够通知到对方;这也导致观察者模式存在逻辑上的耦合,一般多用于事件驱动模型当中。

延伸阅读

观察者模式和发布订阅模式有什么区别

1.概念上的区别

观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。观察者模式有一个别名叫“发布-订阅模式”,或者说是“订阅-发布模式”,订阅者和订阅目标是联系在一起的,当订阅目标发生改变时,逐个通知订阅者。

但在现在的发布订阅模式中,称为发布者的消息发送者不会将消息直接发送给订阅者,这意味着发布者和订阅者不知道彼此的存在。在发布者和订阅者之间存在第三个组件,称为消息代理或调度中心或中间件,它维持着发布者和订阅者之间的联系,过滤所有发布者传入的消息并相应地分发它们给订阅者。

2.工作模式上的区别

在观察者模式中,观察者直接订阅主题,而当主题被激活的时候,会触发观察者里的事件;而在发布订阅模式中,订阅者把自己想订阅的事件注册到调度中心,当发布者发布该事件到调度中心,也就是该事件触发时,由调度中心统一调度订阅者注册到调度中心的处理代码。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部