`
liuxinglanyue
  • 浏览: 565421 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

推拉模式

阅读更多

先来比较两张 UML 图:

       

推模式

 

 拉模式

       两者的区别我再罗嗦一下,推模式是当通知消息来之时,把所有相关信息都通过参数的形式“推给”观察者。而拉模式是当通知消息来之时,通知的函数不带任何相关的信息,而是要观察者主动去“拉”信息。

       推模式的优点是当消息来临时,观察者很直接地都到信息,然后进行相关地处理,与被观察者没有一点联系,两者几乎没有耦合。

       推模式的缺点是当消息来临时,所有的信息都强迫观察者,不管有用与否。还有一个致命的缺点是,如果想在通知消息中添加一个参数,那么所有的观察者都需要修改了,这一点往往被忽视。

       看来事物都有其两面性一点都不假,信息太全也不是一件好事。

       “存在即有理由”,为了弥补推模式的不足,拉模式就诞生了。

       就接着上面的例子,如果 CPerson2 想要都到秒的信息,按推模式来说, CPerson1 也就需要修改了,然而用拉模式,各个观测者之间就没有什么联系了,因为具体的信息还要观测者主动去“拉”,而一旦有了主动权,各个观察者想拉什么信息就取决于具体的观察者了,这样 CPerson1 就无需修改了,只要在 CNotifyBase 中再添加一个接口函数就行了( GetSecond )。

       Q  CClockDevice 不是还要修改吗?

       A 修改是难免的,使用设计模式的目的不是不允许修改,而是让软件更易扩展,更易扩展体现在哪里呢?那就是让修改处尽可能的减少。看到 UML 图中那 1  * 了吗?你现在应该明白了吧?被观察者只要一个,而且不太会更改,而观察者确有很多。让你选择,你会选择修改什么呢?

       当然拉模式的缺点也是存在的,那就是和被观察者有一定的耦合,但我们可以通过接口,把耦合降到最低。

分享到:
评论

相关推荐

    NetMQ例子,多线程模式,推拉模式等

    2. **推拉模式**: - **推模式(Push-Pull)**:在这种模式下,一个“推送者”(Pusher)向一个“拉取者”(Puller)发送消息。推送者负责生产和发送消息,而拉取者负责消费这些消息。这种模式适合于任务调度或者...

    NetMQ例子,推拉模式

    这个库基于ZeroMQ,提供了丰富的消息传递模式,包括发布/订阅(Publish/Subscribe)、请求/响应(Request/Reply)以及推拉模式(Push/Pull)。在本例子中,我们将重点探讨推拉模式。 推拉模式是NetMQ中的两种基本...

    zeromq 代理模式的一些问题

    3. 推拉模式(Push-Pull): 在这种模式中,数据从推节点(Push)流向拉节点(Pull),保证了数据的单向流动。可能出现的问题包括数据堆积在推节点,或者拉节点处理速度慢导致的阻塞。 在实际应用中,代理模式可能...

    rocketmq推拉消息模式设计

    rocketmq推消息模式分享,讲述了基本原理,消息与消息队列,长轮询,offset存储机制,消息异常重推机制的总体概述

    朋友圈微博feed流,推拉实践

    在设计和优化feed流系统时,通常有两种主要的实现方式:拉模式(Read Diffusion)和推模式(Write Diffusion)。 **一、拉模式(读扩散)** 在拉模式中,数据的读取是扩散的。每个用户的feed队列只存储他们自己...

    超级推拉__SU插件

    使用该插件时,你可以发现它提供了多种推拉模式和选项。例如,可以按住特殊键来切换不同的推拉行为,或者在推拉过程中实时调整深度值,这使得在设计过程中无需反复切换工具或测量,极大地提高了工作效率。 此外,...

    【水晶报表内功心法】--推拉之间

    ### 水晶报表内功心法:推拉模式详解 #### 一、概述 水晶报表作为一款功能强大的报表工具,被广泛应用于各种业务场景之中。对于初学者来说,掌握水晶报表的基础操作至关重要。其中,PULL(拉)模式与PUSH(推)...

    推拉技术在数字图书馆中的应用-模板.pdf

    5. **传统图书馆的推拉模式** - **“拉”服务**:读者自行查找图书,图书馆提供被动服务。 - **“推”服务**:如图书预约,当书籍回库,图书馆会主动通知读者。 6. **推拉技术的四种模式** - **先推后拉**:推送...

    智能信息推拉技术的数字图书馆主动信息服务手段研究(1).docx

    1.2.1 智能信息推拉模式主要包括四种类型: 1) 先推后拉式:首先,信息源推送通用或者大众化信息,用户在此基础上选择性地拉取符合自身需求的特定信息。例如,图书馆可以推送新书目录,用户再根据兴趣下载全文。 2...

    ZMQ的三种通信方式极其需要的jar包(完整版)

    推拉模式用于单向数据流,其中一个进程(Pusher)将数据推送到另一个进程(Puller)。`PUSH`角色负责发送数据,而`PULL`角色负责接收数据。这种模式适用于负载均衡和数据处理流水线,如分布式计算任务的分配。 ...

    zmq 发布,订阅模式 , DEOM

    它能够在高并发环境下保持高效,同时提供了多种消息模式(如请求/响应、推拉模式等),以适应不同类型的通信需求。此外,ZMQ支持多种编程语言,包括C、C++、Python、Java等,使得它能够广泛应用于各种项目中。 总的...

    终端拦截营销模式.ppt

    运用“推拉模式”结合线上线下的营销策略,引导顾客进入实体店;通过“请入店”策略,利用管理系统优化客户体验;而“回路营销”则强调建立顾客咨询管理,促进顾客的复购和口碑传播。 综上所述,终端拦截营销模式是...

    水晶报表的使用经验和资料总结

    本文将深入探讨水晶报表的基础知识,特别是推拉模式,以及如何利用这些知识来提升报表制作的效率。 一、水晶报表概述 水晶报表是一款功能丰富的报表设计软件,它允许用户通过直观的图形用户界面创建、修改和管理...

    ZeroMQ 云时代极速消息通信库_带书签目录 完整版

    3. 推拉模式:推拉模式用于点对点通信,其中一方(推者)将消息推送到另一方(拉者),拉者在需要时从队列中拉取消息。这种模式适合处理异步任务或者处理流式数据。 ZeroMQ的另一个显著优点是其高效率。它通过内存...

    ZMQ 4.0.4版本

    ZMQ提供了一组高级通信模式,如发布/订阅、请求/响应、推拉模式等,这些模式使得构建分布式系统变得更加简单。在4.0.4版本中,这些模式得到了进一步的优化,确保了高并发和低延迟的性能。 1. **发布/订阅模式**:在...

    zeroMQ相关资料

    ZeroMQ支持多种消息模式,包括发布/订阅(Publish/Subscribe)、请求/响应(Request/Reply)和推拉模式(Push/Pull),这些模式可以灵活地适应各种应用场景。 发布/订阅模式中,一个或多个发布者发送消息到一个主题...

    zeromq-2.2.0.zip_zeromq_中间件

    推拉模式主要用于负载均衡,其中推者负责发送数据,而拉者负责接收和处理数据,这种模式常用于分布式计算。 路由/经销商模式更为灵活,允许更复杂的请求和响应结构,适用于多对多通信。 在zeromq-2.2.0版本中,...

    计算机并口定义.pdf

    在某些多模式接口中,可能会采用改进的推拉模式,允许控制位作为输入使用。 综上所述,计算机并口从单向传输到双向交互,再到EPP和ECP的出现,不断提升了数据传输的效率和兼容性。并口的内部结构包括数据寄存器、...

    pyzmq-24.0.1.tar

    套接字是ZeroMQ通信的基本单元,可以看作是网络通信的端点,支持多种消息模式,如发布/订阅(Publish/Subscribe)、请求/响应(Request/Reply)和推拉模式(Push/Pull)等。上下文则为多个套接字提供共享的资源,如...

Global site tag (gtag.js) - Google Analytics