当前位置:  开发笔记 > 程序员 > 正文

推,拉机制观察者模式

如何解决《推,拉机制观察者模式》经验,为你挑选了1个好方法。

目前我正在研究设计模式,并且我已经找到了一个部分,我很困惑观察者模式是使用推动机制还是利用拉动机制?

我已经阅读了不同的实现,并不能真正确定哪一个是正确的.

此外,我想知道推模型对拉模型的三个直接优势.我猜其中一个是推模型比拉模型更少耦合?



1> Amandeep..:

观察者模式详细(关注问题)


定义:Observer模式定义了对象之间的一对多依赖关系,这样当一个对象改变状态时,它的所有依赖关系都会自动得到通知和更新

需要关注的3件事:

    可观察对象 - 被观察的对象.

    Observer对象 - 观察可观察对象的对象

    通信机制 - 推或推机制

目前我正在研究设计模式,并且我已经找到了一个部分,我很困惑观察者模式是使用推动机制还是利用拉动机制?

混乱可能是因为你是文学名字 - 拉或推.

请注意,在这两种机制中,Observable对象始终有责任通知所有已订阅的观察者,但不同之处在于观察者是否[Push - >]获得所需的确切数据,或者[Pull->]获取数据包装在某个对象(主要是Observable对象)中,它必须从中提取所需的数据.

Push - > Observer直接获取所需数据

Pull - > Observer获取包装在对象中的数据,它需要提取它.

我已经阅读了不同的实现,并不能真正确定哪一个是正确的.

这里不是纠正的问题,实际上两者在任何情况下都能正常工作.如果我们看到这两种机制的以下细节,那么它最适合于特定场景/情况,可以轻松分析.

此外,我想知道推模型对拉模型的三个直接优势.我猜其中一个是推模型比拉模型更少耦合?

我可能无法提供3个优点,但如果我能通过使用用例示例清楚地了解使用方法,请让我尝试一下:

推动机制

这纯粹是Observable的责任,Observer只需要确保他们在他们的更新方法中放置了所需的代码.

好处

"推"模型的主要优点是观察者和主体之间的耦合较低.

Observable和Observer都是接口/抽象类,实际上是一个设计原则 - 程序接口或超类型

坏处

灵活性较低:由于Observable需要将所需数据发送到Observer,如果我们说1000个观察者并且大多数需要不同类型的数据,它将变得混乱.

用例

当最多2-3种不同类型的观察者(不同类型意味着观察者需要不同的数据)或所有观察者需要相同类型的数据时,应该使用它.

就像银行中的令牌系统一样

在这个所有观察者(不同的LED)中只需要一个通知更新的等待令牌号列表,因此与Pull Mechanism相比,可以更好地以这种方式实现.

拉机制

在pull机制中,Observable有责任通知所有观察者某些事情已经发生了变化,但是这次Observable共享整个具有变化的对象,一些观察者可能不需要完整的对象,所以Observers只需要提取所需的该更新方法中该完整项目的详细信息.

好处

这样做的好处是更灵活.

每个观察者可以自己决定要查询的内容,而不依赖于主题来发送正确的(仅需要的)信息.

坏处

观察者必须知道关于主题的事情,以便从共享的完整对象中查询正确的信息.

用例

当有超过2-3种不同类型的观察者时应该使用它(不同的类型意味着观察者需要不同的数据)

就像任何外汇汇率提供商为不同的投资银行发布外汇汇率一样

在这一些银行只处理INR,其他一些只处理GBP等,因此与Push机制相比,它应该使用Pull机制实现.

参考

头脑优先设计模式书

https://softwareengineering.stackexchange.com/questions/253398/the-observer-pattern-using-the-pulling-mechanism?newreg=999c28a6a1f6499783fbe56eb97fa8ec

https://dzone.com/articles/observer-pattern

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有