我正在阅读Cocoa Fundamentals-> Design Patterns-> Observer - > Uses and Limitations。它提到了“与代表团的显着差异”让我感到困惑:
但接收通知的对象只能在事件发生后作出反应。这与委派的显着差异。委托人有机会拒绝或修改委托对象提议的操作。另一方面,观察对象不能直接影响即将发生的操作。
特别是在委托上有机会拒绝或修改操作,而观察对象却不能。
答案 0 :(得分:25)
委托意味着调用另一个对象来执行给定任务,因此它自然有机会影响该任务的结果。这就像你的朋友要求你今晚购买2张电影票 - 你有话要去哪里,看什么电影,甚至可能建议邀请更多的朋友或去听音乐会。
在任务执行完毕后,通知仅发生,因此通知对象不能再更改事件。这就像你的朋友说“我今晚8点在宫廷电影院有2张阿凡达门票,你想来吗?”。
答案 1 :(得分:7)
@Péter的答案绝对正确。我想补充一点信息:
(void)
以外的某些值。通知方法不能返回任何对象,因为它们没有对象将返回到。答案 2 :(得分:1)
Matt Gallagher写了关于5 approaches to listening and observing的文章,这可能会给出另一种观点。