委託模式 是 Objective-C 獨有的組件化開發模式,透過協定定義介面、委託屬性持有實作者,實現「組件不關心具體實作,只關心行為契約」的鬆耦合架構。
// 1. 定義協定:公司對委託人的要求 @protocol CompanyProtocol- (void)doIPO; @end // 2. 公司類別:持有委託人屬性 @interface Company : NSObject @property (nonatomic, strong) id onePerson; // 弱引用更佳 - (void)startIPO; @end @implementation Company - (void)startIPO { if (self.onePerson && [self.onePerson respondsToSelector:@selector(doIPO)]) { [self.onePerson doIPO]; // 委託執行 } } @end // 3. 具體實作者:財務顧問 @interface Finance : NSObject @end @implementation Finance - (void)doIPO { NSLog(@"開始上市流程!"); } @end // 4. 組裝使用 int main() { Finance *consultant = [[Finance alloc] init]; Company *company = [[Company alloc] init]; company.onePerson = consultant; // 外部注入 (獵頭) [company startIPO]; // 公司啟動 -> 實際由 consultant 執行 }
| 維度 | 合成模式 | 委託模式 | ||
|---|---|---|---|---|
| 元件建立時機 | 初始化時內部建立 | 外部注入、延遲綁定 | ||
| 具體類別依賴 | 強依賴 (import 具體類別) | 零依賴 (僅依賴協定) | ||
| 靈活性 | 低 (編譯期固定) | 高 (執行期切換實作) | ||
| 典型場景 | 功能固定的子模組 | 可替換策略、外部擴充點 |
| 模式 | 類型 | 參數傳遞 | 多組件區分 | 適用場景 |
|---|---|---|---|---|
| Target-Action | 簡單組件 | 單一 sender 參數,其他需透過屬性取得 | 靠 selector 不同區分 | 按鈕、滑桿、手勢 |
| 委託回調 | 複雜組件 | 協定預先定義豐富參數 | 需在方法內判斷 sender | TableView、ScrollView、網路層 |
| Block 回調 | 現代首選 | Block 簽名定義參數,捕獲上下文 | 每個組件獨立 Block,天然隔離 | 非同步完成、動畫、簡單回調 |
weak:避免循環引用 (A 持有 B,B delegate 持有 A)NSObject:獲得 respondsToSelector: 等方法,支援選擇性實作@optional 標記非必要方法:減少實作者負擔- (void)componentName:(Component *)component didSomething:(Type)param;委託模式是 Objective-C 組件化架構的基石。理解其「協定定義契約、外部注入實作、弱引用避免循環」三大核心,並能與 Target-Action、Block 回調靈活搭配,是打造高內聚、低耦合、可測試 iOS 應用的關鍵能力。