Model view controller 观察者、发布/订阅和数据绑定之间的差异
、和之间有什么区别 我搜索了一下堆栈溢出,没有找到任何好的答案 我逐渐相信,数据绑定是一个通用术语,有不同的实现方式,如观察者模式或发布/订阅模式。使用观察者模式,可观察者更新其观察者。通过Pub/Sub,0-many发布者可以发布特定类别的消息,0-many订阅者可以订阅特定类别的消息Model view controller 观察者、发布/订阅和数据绑定之间的差异,model-view-controller,design-patterns,data-binding,observer-pattern,publish-subscribe,Model View Controller,Design Patterns,Data Binding,Observer Pattern,Publish Subscribe,、和之间有什么区别 我搜索了一下堆栈溢出,没有找到任何好的答案 我逐渐相信,数据绑定是一个通用术语,有不同的实现方式,如观察者模式或发布/订阅模式。使用观察者模式,可观察者更新其观察者。通过Pub/Sub,0-many发布者可以发布特定类别的消息,0-many订阅者可以订阅特定类别的消息 还有其他实现“数据绑定”的模式吗?观察者/可观察者和发布者/订阅者模式之间有两个主要区别: 观察者/可观察者模式主要以同步方式实现,即当某个事件发生时,可观察者调用其所有观察者的适当方法。发布者/订阅者模式主要
还有其他实现“数据绑定”的模式吗?观察者/可观察者和发布者/订阅者模式之间有两个主要区别:
正如您正确提到的,数据绑定是一个通用术语,可以使用Observer/Observable或Publisher/Subscriber方法来实现。数据是发布者/可观察者。以下是我对三个方面的看法: 数据绑定 本质上,这只是意味着“对象Y上的属性X的值在语义上与对象B上的属性A的值绑定。没有假设Y如何知道或反馈对象B上的更改 观察者,或可观察/观察者 一种设计模式,通过这种模式,一个对象能够通知其他人特定事件——通常使用实际事件来完成,这有点像对象中具有特定函数/方法形状的插槽。可观察者是提供通知的人,观察者接收这些通知。在.net中,观察者able可以公开一个事件,观察者使用“事件处理程序”形状的钩子订阅该事件。没有对通知发生的具体机制进行假设,也没有对一个观察者可以通知的观察者数量进行假设 发布/订阅 Observable/Observator模式的另一个名称(可能有更多的“广播”语义),这通常意味着更“动态”的风格——观察者可以订阅或取消订阅通知,而一个Observable可以“呼喊”“给多个观察员。在.NET中,可以使用标准事件进行此操作,因为事件是MulticastDelegate的一种形式,因此可以支持向多个订阅者传递事件,也支持取消订阅。Pub/Sub在某些上下文中的含义稍有不同,通常涉及事件和事件之间更多的“匿名性”,这可以通过任何数量的抽象来实现,通常涉及一些“中间人”(如消息队列),他们了解所有各方,但各方并不相互了解 数据绑定 在许多“类似MVC”的模式中,observable公开了某种形式的“属性更改通知”,其中还包含有关特定属性更改的信息。观察者是隐式的,通常由框架创建,并通过一些绑定语法订阅这些通知,以专门标识对象和属性,“事件处理程序”只是复制新值,可能触发任何更新或刷新逻辑 数据绑定重新复制 数据绑定的替代实现?好吧,这里有一个愚蠢的例子:
- 启动一个后台线程,不断检查对象的绑定属性
- 如果该线程检测到自上次检查以来属性的值已更改,请将该值复制到绑定项
我希望这有帮助 我有点好笑,这里的所有答案都试图解释Observer和Pub/Sub模式之间的细微差别,而没有给出任何具体的例子。我打赌大多数读者仍然不知道如何通过读取一个是同步的,另一个是异步的来实现每一个 需要注意的一点是:这些模式的目标是尝试将代码解耦 观察者是一种设计模式,其中一个对象(称为主体)根据它(观察者)维护一个对象列表,并自动通知它们状态的任何更改 这意味着一个
可观察对象
有一个列表,其中保存了它的所有观察者
(通常是函数)。并且可以遍历此列表并在感觉合适时调用这些函数
有关详细信息,请参见示例
当您希望侦听对象上的任何数据更改并更新其他UI视图时,此模式非常有用
var events = {
"event1": [handler1, handler2],
"event2": [handler3]
}