4

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

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

我真的不明白:

1.为什么handlers需要有Unit类型?

2.观察者模式是如何强制命令式编程的?

4

2 回答 2

7

我尚未查看发布的视频,因此我的答案基于 OP 的原始问题。

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

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

于 2015-12-14T15:36:27.270 回答
2

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

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

如果你去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,它不可能是纯的

于 2015-12-14T15:36:00.490 回答