观察者模式强制使用命令式风格
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 一些更有意义的类型,但是由于观察者模式在实践中的使用方式,无论如何这可能会被忽略...
我在看 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 一些更有意义的类型,但是由于观察者模式在实践中的使用方式,无论如何这可能会被忽略...