我在看 Coursera 的反应式编程课程,它使用 Scala 来实现观察者模式。在那里,Martin Odersky 说观察者模式强制执行命令式编程,我们可以看到这是因为订阅者的处理程序具有Unit
类型。
他在这里说: https : //class.coursera.org/reactive-002/lecture/107 9:40
我真的不明白:
1.为什么handlers需要有Unit
类型?
2.观察者模式是如何强制命令式编程的?
我在看 Coursera 的反应式编程课程,它使用 Scala 来实现观察者模式。在那里,Martin Odersky 说观察者模式强制执行命令式编程,我们可以看到这是因为订阅者的处理程序具有Unit
类型。
他在这里说: https : //class.coursera.org/reactive-002/lecture/107 9:40
我真的不明白:
1.为什么handlers需要有Unit
类型?
2.观察者模式是如何强制命令式编程的?
我尚未查看发布的视频,因此我的答案基于 OP 的原始问题。
根据模式的定义,处理程序是回调;因此,它们具有Unit
返回类型,因为它们描述了将响应通知而执行的一些行为。这就是副作用的定义。
因此,观察者模式是一种内在的命令模式的声明:函数的调用者(例如 notifyObservers(observer) )并不关心函数本身的结果,但它依赖于它将产生的副作用。这是命令式编程。
作为旁注,作为Unit
结果类型的事实并不是绝对必要的,但如前所述,它表明除了副作用之外没有任何兴趣。一个人可以,潜在地,对方法进行通用建模并返回一些更有意义的类型,但由于观察者模式在实践中的使用方式,无论如何这可能会被忽略......
因为如果它们确实具有除 之外的返回类型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,它不可能是纯的