观察者模式、发布/订阅模式和数据绑定的区别。

32 浏览
0 Comments

观察者模式、发布/订阅模式和数据绑定的区别。

观察者模式、发布/订阅和数据绑定之间有什么区别?

我在 Stack Overflow 上搜索了一下,但没有找到好的答案。

我现在相信数据绑定是一个通用术语,有不同的实现方式,比如观察者模式或发布/订阅模式。使用观察者模式,一个可观察对象更新它的观察者。使用发布/订阅模式,0 到多个发布者可以发布特定类别的消息,0 到多个订阅者可以订阅特定类别的消息。

有其他实现“数据绑定”的模式吗?

admin 更改状态以发布 2023年5月23日
0
0 Comments

以下是我的看法:

数据绑定

本质上,这只是意味着“对象Y上的属性X的值与对象B上的属性A的值语义地绑定在一起。不假设Y如何知道或被喂养对象B上的变化。

观察者,可观察的/观察者

一种设计模式,通过该模式,对象被赋予了通知其他特定事件的能力 - 通常使用实际的事件来完成,这些事件就像是具有特定函数/方法形式的对象中的插槽一样。 可观察对象提供通知,观察者接收这些通知。 在.NET中,可观察对象可以公开事件,而观察者通过具有“事件处理程序”形式的钩子订阅该事件。不对通知发生的具体机制,以及一个可观察对象可以通知的观察者数量做出假设。

发布/订阅

Observable/Observer模式的另一个名称(可能具有更多的“广播”语义),这通常意味着一种更“动态”的口味 - 观察者可以订阅或取消订阅通知,而一个可观察对象可以向多个观察者“大喊”。 在 .NET中,可以使用标准事件来实现这一点,因为事件是一种MulticastDelegate形式,因此可以支持向多个订阅者传递事件,并支持取消订阅。在某些情况下,“发布/订阅”具有略微不同的含义,通常涉及事件与发生事件之间的更多“匿名性”,可以通过任何数量的抽象来实现,通常涉及一些“中间人”(例如消息队列),该中间人知道所有参与方,但各个方不知道彼此。

数据绑定,Redux

在许多“MVC-like”模式中,可观察对象会暴露一些“属性更改通知”,同时也包含有关更改的特定属性的信息。观察者是隐式的,通常由框架创建,并通过某些绑定语法订阅这些通知,以特定地标识对象和属性,而“事件处理程序”仅将新值复制过去,可能触发任何更新或刷新逻辑。

Redux中的数据绑定

数据绑定的另一种实现方式?好的,这是一个愚蠢的做法:

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

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

  1. 观察者/可观察模式通常以同步的方式实现,即当某个事件发生时,可观察对象会调用所有观察者的适当方法。而发布者/订阅者模式通常以异步的方式实现(使用消息队列)。

  2. 观察者/可观察模式中,观察者知道可观察对象。而在发布者/订阅者模式中,发布者和订阅者不需要相互了解。它们只是在消息队列的帮助下进行通信。

正如您所正确指出的,数据绑定是一个通用术语,可以使用观察者/可观察或发布者/订阅者方法来实现。数据是发布者/可观察对象。

0