Events 观察者模式与事件驱动方法的区别
我总是发现观察者模式几乎与通常的事件驱动方法相似。事实上,我几乎相信它们实际上只是指同一事物的不同名称。它们都使用类似的概念作为侦听器,甚至在实现中,它们几乎是一样的,即使用回调方法/函数来执行操作。至少在Java中是这样 在其他语言(如Actionscript/Flex)中,事件更为用户友好,看起来可能不仅仅是观察者模式定义的。但是,这些概念听起来还是一样的Events 观察者模式与事件驱动方法的区别,events,design-patterns,observer-pattern,Events,Design Patterns,Observer Pattern,我总是发现观察者模式几乎与通常的事件驱动方法相似。事实上,我几乎相信它们实际上只是指同一事物的不同名称。它们都使用类似的概念作为侦听器,甚至在实现中,它们几乎是一样的,即使用回调方法/函数来执行操作。至少在Java中是这样 在其他语言(如Actionscript/Flex)中,事件更为用户友好,看起来可能不仅仅是观察者模式定义的。但是,这些概念听起来还是一样的 但这是真的吗?观察者模式是否与通常的事件驱动编程风格相同?是的,它们基本相同 事件类似于某些语言的“内置”观察者模式模板 因此,您不会用
但这是真的吗?观察者模式是否与通常的事件驱动编程风格相同?是的,它们基本相同 事件类似于某些语言的“内置”观察者模式模板 因此,您不会用支持事件的语言真正实现观察者模式,因为它们已经提供了您所需要的内容。
另一方面,您可以使用observer模式以缺少事件的语言编写事件驱动。observer模式是一个非常特殊的实例。事件驱动可以意味着任何事情。在大多数观察者模式实现中,观察者是观察被观察者的对象。当观察者发生变化时,将调用观察者的方法。严格地说,这不是一个“事件”。这意味着:对被观察者的各种不同动作,通常会导致在观察者中调用不同的方法。语义“what”在方法中发生了更改。
在事件驱动系统中,基本上只有一个消费对象/方法和消息,即事件中发生了什么或发生了什么。这可以是任何东西,而且不限于观察某事物的想法!这意味着:在事件驱动的系统中,通过添加新的事件类型,可以获得新的语义。在观察者模式中,通常通过向观察者类添加方法来添加语义。但是:没有人阻止您将观察器实现为ChangeEvents的特殊列表 第一个区别可能是,事件系统总是有一个eventdispatchthread,它将观察对象与其观察者分离,因此事件可能不会立即到达观察者。当真实的观察对象直接调用观察者方法时,事件驱动的观察对象将其事件放入事件队列中。然后EDT将这些事件发送给注册的侦听器。当发布者或主题发生状态更改时
- 事件驱动体系结构(是一种消息驱动体系结构),负责以异步方式向订阅者传递消息
- 观察者模式(是一种软件设计模式),负责同步地命令订阅者做某事
这两点是我的理解,它将驾驶员和观察者模式区分开来。至少从规范的解释来看,“观察者模式”通常表示一旦“主体”发生变化,并且通过调用订阅者或监听者提供的接口来实现“调度”,则立即广播。而对于事件驱动,在“主体”和“观察者”之间总是有另一层。称为“调度程序”或使用“事件队列”。这提供了“延迟”“根据不同的事件类型,处理以减少CPU使用,并提供调用不同接口的特定功能 两者的基本区别在于耦合和同步行为。如果我们坚持观察者模式,我们说只有一个信号源,它将是同步的,而另一方面,对于事件,我们将双方解耦,以便独立工作,同时考虑将来可能有多个事件源,而不需要任何代码更改。事件帮助我们接受异步设计。所有反应式编程库都为事件驱动设计提供了很好的支持。来源: 观察者模式是一种软件设计模式,其中对象, 名为subject,维护其从属项的列表,名为 观察者,并自动通知他们任何状态更改, 通常通过调用他们的方法之一 它主要用于实现分布式事件处理系统,例如 “事件驱动”软件。大多数现代语言,如Java和C# 内置了实现观察者模式的“事件”结构 组件,便于编程和简短的代码 观察者模式更加抽象和理论化。事件是一种(通常是内置的)实现,但是正如Angel的回答中所指出的,除了在观察者模式中严格定义的以外,事件往往能够用于其他一些情况 事件驱动编程是一个定义范例的术语。鉴于 可观察模式是制作应用程序的设计解决方案 事件驱动
干杯 我试着做得很简单,因为这也帮了我一次忙 作为观察者和被观察者思考。取而代之的是,被观察者标记一个改变的集合,观察者向被观察者请求已经改变的内容,被观察者向观察者广播一个对象(事件携带状态),其中包含关于改变的所有相关信息。所以在观察者和被观察者之间实际上还有一个例子
综合这个问题的多个答案,再加上我自己的经验,观察者模式和事件驱动(Pub-Sub)架构之间的关键区别在我看来是: 在Observer模式中,Observed维护对其Observers的引用 而在酒吧里,第