我對Objective-C相當陌生,但是在Java中經驗豐富。 Java中有Objective-C「委託」的等價概念嗎,這樣我可以更好地理解這個概念嗎?有沒有辦法模仿Java中的委託概念?Objective-C委派向Java程序員解釋
回答
委託是一種面向對象的設計模式。 Java中的一個例子是維基百科:Delegation Pattern
委託只是一種避免必須像表視圖那樣對象進行子類化以實現特定於應用程序的行爲,而是將該責任放在控制器上的方法。在創建表視圖時,爲其分配一個控制器對象,該控制器對象實現了一組定義的方法(其中一些可能是必需的,其他可能是可選的)。當表格視圖需要數據或必須決定如何顯示自己時,它會詢問委託人是否實現了適當的方法,並在它做出決定時調用它。
謝謝。在你的例子中,你爲控制器提供了一個委託。該委託包裝表視圖將與之交互的控制器。正確?在Java中,您可以讓委託實現與常規控制器相同的接口。 Objective-C中有這個概念嗎? – 2009-01-14 21:38:25
java.lang.reflect.Proxy
是java中最接近的等效項。儘管如此,使用起來很繁瑣。
下面是一種思考代表的方式 - 在OOP典型示例中,我有一個汽車對象。我不想再次繼承它,我只是想按原樣使用它,所以我如何使它像雪佛蘭或野馬一樣行事?我給它一個代表。
我的車將有方法來驅動,方法按喇叭等
我的代表將有一個像「什麼是我的最高速度」和「什麼是喇叭聽起來像」和「是我的窗戶有色」的方法
所以,當我打電話給我的汽車對象(不是子類別)時,該方法會調用我的代理的topSpeed方法,並且代表告訴它120英里每小時,所以汽車知道應該多快而不必野馬。
目標C通常有它定義了一個委託應迴應,即我的車對象的代表將有一個協議,聲明如下協議:
@protocol carDelegate
-(int)carTopSpeed;
-(UIColor*)carColor;
-(BodyShape*)carBodyShape;
-(DragCoefficient*)carDragCoefficient;
-(HoodOrnament*)carHoodOrnament
@optional
-(BOOL)windowsTinted;
@end
然後你就可以讓自己的對象,符合本協議(實現所有必需的方法,以及根據需要看到的任何可選方法)
而汽車對象會希望將一個(id)作爲代表傳遞給它。
然後汽車對象設法避免被分類,並且仍然可以根據用戶的需求行事。
- 1. 向程序員解釋嵌套數組
- 2. 你會如何向非程序員解釋演員?
- 3. C#委派成員 - ReSharper的
- 4. 你會如何向非程序員解釋反射?
- 5. 如何向非程序員解釋公鑰加密?
- 6. 如何向非程序員解釋源代碼控制(Mercurial/Tortoise)?
- 7. 解釋代碼 - 非PHP程序員
- 8. Java中的自動委派
- 9. 請解釋Python for循環到C++/C#/ Java程序員
- 10. 面向C++程序員的Java?
- 11. 需要解釋Java程序邏輯
- 12. 解釋Java的程序排列
- 13. java的域名解釋實用程序
- 14. 如何解釋java程序集?
- 15. 請解釋.NET委託人
- 16. 作爲Delphi程序員瞭解Java
- 17. 向派生類中的成員添加數據註釋
- 18. Kerberos委派
- 19. 委派事件模型模式Java
- 20. 向量解釋
- 21. 向客戶端解釋.NET或Java
- 22. 委派的同名
- 23. 用於在應用程序之間委派任務的Java企業架構
- 24. 指向釋放對象的NSDrawer委託?
- 25. 委派線程安全ConcurrentMap和的AtomicInteger
- 26. 緩衝區和Memoryview對象爲非C程序員解釋
- 27. 解釋ML類型推斷的C++程序員
- 28. 向程序員學習C
- 29. 請解釋這個程序?
- 30. 解釋程序的輸出
感謝您的鏈接。它是否像包裝另一個對象一樣簡單 - 並暴露這些相同的方法,但具有(稍微)不同的行爲?我對代表團的理解(非常有限)是Objective-C中的頭等概念。 – 2009-01-14 20:54:41
這不是頭等艙。這只是Cocoa的一個常見設計模式。沒有什麼特別的。 – robottobor 2009-01-14 20:59:14
這在Objective C中更容易實現,因爲它更容易檢測任意對象是否有你想調用的方法(而不是真正稱爲「選擇器」的方法),這使得可以方便地使用包含對象的可選方法(被包裝的物體通常被稱爲「代表」)。 – 2009-01-18 04:49:28