首页 > 其他分享 >说说设计模式~ 观察者模式与消费者模式的区别

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

时间:2022-12-15 18:34:05浏览次数:36  
标签:订阅 消费者 生产者 观察者 模式 发布者 设计模式

​​返回目录​​

再说概念

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

图像中的消费者模式

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

 

图像中的观察者模式

说说设计模式~ 观察者模式与消费者模式的区别_生产者消费者_02

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

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

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

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

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

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

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

 


作者:仓储大叔,张占岭,
荣誉:微软MVP


标签:订阅,消费者,生产者,观察者,模式,发布者,设计模式
From: https://blog.51cto.com/u_15765017/5945647

相关文章

  • 模式识别,模式识别70年学科发展报告基础篇
    模式识别学科发展报告头版模式识别国家重点实验室编写中国科学院学科发展战略研究项目成果 该报告摘录了最近50项重要研究进展未来30个重要研究问题 分模式识别......
  • VMware虚拟机NAT模式端口转发
    作用虚拟机网络选择NAT方式,启用端口转发,可以实现宿主机器和虚拟机的端口映射 如果我们把映射虚拟机的端口设为22,就可以通过宿主机器ip加端口直接远程虚拟机了 操......
  • 【分享一个工具】通过定义proto3来自动生成多进程模式的插件代码
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯我在多进程插件框架hashicorp/go-plugin的基础上,使用pro......
  • 桥接网络配置模式文档1
    桥接网络配置模式文档使用虚拟机vmware 版本15创建好虚拟机以后配置选择桥接模式实现网段最后的互通 2 点击设置后选择桥接模式   3 点击编辑选择虚拟网络......
  • 建造者模式
     ​​http://blog.51cto.com/craftsman001/1662488​​建造者模式需要四大角色:(1)目标者类Target:有n个属性。不能多变。(2)抽象建造者接口Builder:关联目标类Target,对应n个属性......
  • 单例模式
    首先介绍一下单例模式:    单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要......
  • 简单工厂模式(创建型)
    如何创建一个对象?publicinterfaceProductpublicclassAppleProductpublicclassGoogleProductpublicclassBananaProduct###########################################......
  • 工厂模式
    想多了都是问题,想通了都是答案第一部分,简单工厂模式哪朵玫瑰没有荆棘,最好的报复是美丽,最美的盛开是反击,别让谁去改变了你。当看到new,就会想到具体先看一段代码Duck......
  • JavaScript学习--Item1 严格模式
    一、概述除了正常运行模式,ECMAscript5添加了第二种运行模式:“严格模式”(strictmode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。设立”严格模式”的目的,主要......
  • 行为型:设计模式之解释器模式(二十二)
     虽然目前计算机编程语言有好几百种,但有时候我们还是希望能用一些简单的语言来实现一些特定的操作,我们只要向计算机输入一个句子或文件,它就能够按照预先定义的文法规则来对......