观察者模式强制势在必行的风格

时间:2015-12-14 15:10:41

标签: scala functional-programming observer-pattern imperative-programming

我正在查看Coursera中的Reactive Programming课程,该课程使用Scala实现Observer模式。在那里,Martin Odersky说Observer模式强制命令式编程,我们可以看到,因为订阅者的处理程序有Unit类型。

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

我真的不明白:

1.为什么处理程序需要Unit类型?

2. Observer模式如何强制命令式编程?

2 个答案:

答案 0 :(得分:7)

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

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

作为旁注,Unit是结果类型的事实不是严格必要,但如前所述,传达没有兴趣除了副作用。有人可能会对该方法进行一般建模并返回一些更有意义的类型,但由于观察者模式在实践中的使用方式,这可能会被忽略......

答案 1 :(得分: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了它不可能是纯粹的