2010-02-28 25 views
2

我正在閱讀可可基礎知識 - >設計模式 - >Observer - >使用和限制。它提到了「從代表團顯著差異」,混淆我:授權和通知之間的重大差異

但接收通知的對象可以反應在事件發生之後。這是來自代表團的顯着差異。委託人有機會拒絕或修改委託對象提出的操作。另一方面,觀察對象不能直接影響即將進行的操作。

特別是委託人有機會拒絕或修改操作,而觀察對象不能。

+1

你的問題是什麼? – CajunLuke 2010-02-28 21:04:40

+0

嗨CajunLuke: 我的問題是什麼意思,委派有機會拒絕或修改操作,而觀察對象不能直接影響即將發生的操作。 – 2010-02-28 21:13:59

回答

25

代表團意味着另一個對象被調用來執行給定的任務,所以自然有機會影響該任務的結果。這就像你的朋友要求你今晚買2張電影票 - 你有發言權去哪裏,看什麼電影,甚至可能會建議邀請更多的朋友或去音樂會。

通知僅在之後發生任務已執行,因此通知的對象不能再更改該事件。這就像你的朋友說的:「我今晚8點在宮殿電影院有2張阿凡達的門票,你願意來嗎?」。

+0

嗨Peter:非常感謝你的例子讓事情變得更容易理解。 – 2010-02-28 21:12:07

+0

+1這個輝煌的例子 – Roman 2010-02-28 22:56:19

+1

+1是的,我會偷那個。抄襲是奉承的最真誠的形式。 – TechZen 2010-03-01 00:14:12

7

@Péter的回答是絕對正確的。我想補充一點信息:

  • 一個對象只能有一個委託。但是,許多對象可以偵聽來自單個對象的通知。通知會「廣播」給整個應用程序,任何想要收聽通知並對其做出反應的人都可以收聽。
  • 委託方法可以有一個返回值。換句話說,他們可以返回除(void)以外的其他值。通知方法不能返回任何對象,因爲它們沒有對象返回
  • 委託方法立即被調用,而通知通常被延遲,直到通過運行循環的下一個循環。這意味着對象可以在繼續之前立即使用其代表檢索信息。這是代表如此有用的主要原因。您可以向他們詢問信息,他們會立即回覆。
+2

本地(未分發)通知立即發送。引用:http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/ – 2010-03-01 01:01:19

+0

@彼得謝謝,我以前從未注意到! – 2010-03-01 04:18:09