授权和通知之间的重大区别

时间:2010-02-28 20:58:22

标签: cocoa design-patterns

我正在阅读Cocoa Fundamentals-> Design Patterns-> Observer - > Uses and Limitations。它提到了“与代表团的显着差异”让我感到困惑:

  

但接收通知的对象只能在事件发生后作出反应。这与委派的显着差异。委托人有机会拒绝或修改委托对象提议的操作。另一方面,观察对象不能直接影响即将发生的操作。

特别是在委托上有机会拒绝或修改操作,而观察对象却不能。

3 个答案:

答案 0 :(得分:25)

委托意味着调用另一个对象来执行给定任务,因此它自然有机会影响该任务的结果。这就像你的朋友要求你今晚购买2张电影票 - 你有话要去哪里,看什么电影,甚至可能建议邀请更多的朋友或去听音乐会。

在任务执行完毕后,通知仅发生,因此通知对象不能再更改事件。这就像你的朋友说“我今晚8点在宫廷电影院有2张阿凡达门票,你想来吗?”。

答案 1 :(得分:7)

@Péter的答案绝对正确。我想补充一点信息:

  • 一个对象只能有一个委托。但是,许多对象可以侦听来自单个对象的通知。通知被“广播”到整个应用程序,任何想要听取通知并对其作出反应的人都可以。
  • 委托方法可以具有返回值。换句话说,他们可以返回(void)以外的某些值。通知方法不能返回任何对象,因为它们没有对象将返回到
  • 立即调用委托方法,而通知通常会延迟到运行循环的下一个循环。这意味着对象可以在继续之前使用其委托来立即检索信息。这是代表们如此有用的主要原因。您可以向他们询问相关信息,他们会立即回复。

答案 2 :(得分:1)

Matt Gallagher写了关于5 approaches to listening and observing的文章,这可能会给出另一种观点。