观察者模式 、 发布/订阅 和 数据绑定 有什么区别?
我开始相信数据绑定是一个通用术语,并且有不同的实现方式,例如观察者模式或发布/订阅模式。使用观察者模式,可观察者更新其观察者。使用 Pub/Sub,0-many 发布者可以发布某些类的消息,0-many 订阅者可以订阅某些类的消息。
还有其他实现“数据绑定”的模式吗?
以下是我对三者的看法:
从本质上讲,这只是意味着“对象 Y 上的属性 X 的值在语义上绑定到对象 B 上的属性 A 的值。没有假设 Y 如何知道或接受对象 B 上的更改。
一种设计模式,通过该设计模式,对象具有通知其他特定事件的能力 - 通常使用实际事件完成,这些事件有点像对象中具有特定功能/方法形状的插槽。可观察者是提供通知的人,观察者接收这些通知。在 .net 中,observable 可以公开一个事件,并且观察者使用“事件处理程序”形状的钩子订阅该事件。没有关于通知发生的具体机制,也没有关于一个 observable 可以通知的观察者的数量做出任何假设。
Observable/Observer 模式的另一个名称(可能具有更多“广播”语义),这通常意味着更“动态”的风格 - 观察者可以订阅或取消订阅通知,一个可观察者可以向多个观察者“大喊”。在 .NET 中,可以为此使用标准事件,因为事件是 MulticastDelegate 的一种形式,因此可以支持将事件传递给多个订阅者,并且还支持取消订阅。Pub/Sub 在某些上下文中的含义略有不同,通常在 event 和 eventer 之间涉及更多的“匿名性”,这可以通过任意数量的抽象来促进,通常涉及一些知道一切的“中间人”(例如消息队列)各方,但个别各方不知道对方。
在许多“类似 MVC”的模式中,可观察对象公开了某种方式的“属性更改通知”,其中还包含有关更改的特定属性的信息。观察者是隐式的,通常由框架创建,并通过某种绑定语法订阅这些通知以明确标识对象和属性,并且“事件处理程序”只是将新值复制过来,可能会触发任何更新或刷新逻辑。
数据绑定的替代实现?好吧,这是一个愚蠢的: