观察者模式强制使用命令式风格

Observer pattern forces imperative style

我在看 Coursera 的响应式编程课程,它使用 Scala 来实现观察者模式。在那里,Martin Odersky 说观察者模式强制命令式编程,我们可以看到这是因为订阅者的处理程序具有 Unit 类型。

他在这里说:https://class.coursera.org/reactive-002/lecture/107 在 9:40

不太明白:

1.Why 处理程序是否需要 Unit 类型?

2.How观察者模式是否强制命令式编程?

因为如果它们确实有 return 类型而不是 Unit,observable 调用处理程序的顺序就变得很重要。并不是说 observable 现在应该知道 return 类型并且应该能够处理它们,这不是观察者模式的一部分。

一般来说,观察者模式意味着观察者和可观察者都应该有一个状态,因为观察者被设计用来对可观察者中的事件做出反应,而这个模式描述了那些对象的状态之间的反应。

如果你去wiki看观察者模式定义,你会发现in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes,里面有state这个词,这已经意味着我们没有不再是 FP,它不能是纯粹的

我没有看过发布的视频,所以我的回答基于 OP 的原始问题。

根据模式的定义,处理程序是回调;因此,它们具有 Unit return 类型,因为它们描述了一些 行为 ,这些行为将响应通知而执行。这就是副作用的定义。
因此声明观察者模式本质上是命令式模式:函数的调用者(例如 notifyObservers(observer) )不关心函数本身的结果,但它依赖于它的副作用会有。这就是命令式编程。

作为旁注,Unit 是结果类型这一事实并不是 绝对必要的 ,但是,如前所述,表明存在 除了副作用之外对任何事情都不感兴趣。可以潜在地对方法进行通用建模和 return 一些更有意义的类型,但是由于观察者模式在实践中的使用方式,无论如何这可能会被忽略...