【问题标题】:Observer pattern forces imperative style观察者模式强制命令式风格
【发布时间】:2016-03-20 03:07:39
【问题描述】:

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

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

我不太明白:

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

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

【问题讨论】:

  • 你介意把他说这句话的确切视频/时间联系起来吗?可以帮助你得到答案。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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了,它不可能是纯的了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-20
      • 2023-04-10
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多