观察者面向对象的设计模式只是实现回调的一种形式吗?

Posted

技术标签:

【中文标题】观察者面向对象的设计模式只是实现回调的一种形式吗?【英文标题】:Is the observer object oriented design pattern just a form of implementing a callback? 【发布时间】:2020-03-09 12:54:45 【问题描述】:

最近有人问我,在观察者 OO 设计模式中,回调和观察者有什么区别。我的理解是,回调是作为参数传递给函数的任何可执行代码,该函数在特定事件发生时被调用。它可以在不同的编程语言中以不同的形式实现,例如面向对象范式中的函数指针、匿名函数和观察者/侦听器。

开发者通常实现回调注册与代码执行同步,只支持一次回调,而观察者/监听者回调注册始终与代码执行异步,支持多次注册。

但是,我相信回调中同步和基数的那些通常限制并不是其定义中固有的。对吗?

参考:https://en.wikipedia.org/wiki/Callback_(computer_programming)

【问题讨论】:

【参考方案1】:

我不知道回调有什么官方定义。至少,它不会出现在SE Vocab 中。它确实显示在 SO 上,但您可以看到答案有所不同。

Observer确实有一个官方定义(GoF),它是发布/订阅的同义词。当然,有些开发人员定义了足够广泛的回调以包含 pub/sub。其他人在两者之间画了一个distinction。

您必须选择一个回调定义。那么这个问题你就会有答案了。

顺便说一句,关于***,那里有关于许多设计模式的极其不准确的misleading 信息;所以我绝不会认为它是任何技术的官方定义。

【讨论】:

以上是关于观察者面向对象的设计模式只是实现回调的一种形式吗?的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 项目中的观察者模式

KVO

观察者模式

UI进阶 KVO

Android -- 每日一问:回调函数和观察者模式的区别?

基于Guava API实现异步通知和事件回调