观察者、PUB/SUB和数据绑定之间的差异

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

之间的区别是什么?观测器模式,发布/订阅,和数据绑定?

我开始相信,数据绑定是一个通用术语,实现它的方法有很多,比如观察者模式或Pub/Sub模式。使用观察者模式,一个可观察的更新它的观察者。使用Pub/Sub,0-许多发布者可以发布特定类的消息,0-许多订阅者可以订阅某些类的消息。

是否还有其他实现“数据绑定”的模式?

提问于
用户回答回答于

以下是我对这三个人的看法:

数据绑定:

本质上,这只是意味着“属性X在对象Y上的值在语义上与对象B上的属性A的值相结合。”

观察员,或可观察/观察员:

一种设计模式,其中对象具有通知其他人特定事件的能力--通常是使用实际事件完成的,这些事件是对象中具有特定函数/方法形状的类似槽。可观察者是提供通知的人,观察者接收这些通知。在.NET中,可观察到的对象可以公开一个事件,观察者使用“事件处理程序”形状的钩子订阅该事件。对于通知发生的具体机制没有作出任何假设,也没有对一个可观察到的观察员可以通知的人数作出任何假设。

发布/订阅:

另一个名称(可能具有更多的“广播”语义)是可观察/观察者模式,这通常意味着更“动态”的风格--观察者可以订阅或取消订阅通知,一个可观察到的人可以向多个观察者“大声呼喊”。在.NET中,可以为此使用标准事件,因为事件是MulticastDelegate的一种形式,因此可以支持将事件传递给多个订阅者,还可以支持取消订阅。在某些情况下,PUB/SUB的含义略有不同,通常涉及到事件和事件之间更多的“匿名性”,这可以通过任意数量的抽象来实现,通常涉及到一些认识所有各方的“中间人”(如消息队列),但单个当事人并不了解对方。

数据绑定,redux:

在许多“mvc样”模式中,可观察到的公开了某种形式的“属性更改通知”,其中还包含有关特定属性更改的信息。观察者是隐式的,通常由框架创建,并通过某些绑定语法订阅这些通知,以明确标识对象和属性,而“事件处理程序”只是将新值复制到上面,可能触发任何更新或刷新逻辑。

数据绑定Redux:

数据绑定的替代实现?

  • 启动一个后台线程,该线程不断检查对象上的绑定属性。
  • 如果该线程检测到自上次检查以来属性的值已更改,则将该值复制到绑定项。
用户回答回答于

观察者/可观察模式与发布者/订阅者模式之间有两个主要区别:

  1. 观察员/可观察的模式主要是在同步方法,即,当某一事件发生时,可观察者调用其所有观察者的适当方法。发行者/订阅者模式主要是在异步方法(使用消息队列)。
  2. 观察员/可观察的模式观察家们知道.鉴于,在发行者/订阅者、出版商和订户不需要互相了解,他们只是在消息队列的帮助下进行通信。

正如您正确地提到的,数据绑定是一个通用术语,可以使用观察者/可观察或发布/订阅者方法来实现。数据是发布服务器/订阅服务器。

扫码关注云+社区