實作 Swift 設計模式
  • 前言
  • Swift 設計模式
  • 入門 - 開始
  • 設計模式之王 - MVC
    • 如何使用 MVC 模式
  • 簡易工廠模式 - Simple Factory
    • 如何使用簡易工廠模式
  • 外觀模式 - Facade
    • 如何使用外觀模式
  • 裝飾者模式 - Decorator
    • 擴展
    • 如何使用擴展
    • 委派
    • 如何使用委派模式
  • 單例模式 - Singleton
    • 如何使用單例模式
  • 適配器模式 - Adapter
    • 如何使用適配器模式
  • 觀察者模式 - Observer
    • 通知 - Notification
    • 鍵值觀察 - KVO
    • 事件流 - Event Flow
  • 設計模式之神話 - MVP
    • 如何使用 MVP 模式
    • 最後的潤色
  • 入門 - 小結
Powered by GitBook
On this page

Was this helpful?

  1. 裝飾者模式 - Decorator

委派

Previous如何使用擴展Next如何使用委派模式

Last updated 6 years ago

Was this helpful?

裝飾者模式的另一種實現方案是委派。在這種機制下,一個物件可以和另一個物件相關聯。比如你在用 UITableView ,你必須實現 tableView(_:numberOfRowsInSection:) 這個委派方法。

你不應該指望 UITableView 知道你有多少數據,這是個應用層該解決的問題。所以,數據相關的計算應該通過 UITableView 的委派來解決。這樣可以讓 UITableView 和數據層分別獨立。視圖層就負責顯示數據,你遞過來什麼我就顯示什麼。

下面這張圖很好的解釋了 UITableView 的工作過程:

UITableView 的工作僅僅是展示數據,但是最終它需要知道自己要展示那些數據,這時就可以向它的委託詢問。在 objc 的委託模式里,一個類可以通過協議來聲明可選或者必須的方法。

看起來似乎繼承然後重寫必須的方法來的更簡單一點。但是考慮一下這個問題:繼承的結果必定是一個獨立的類,如果你想讓某個對象成為多個對象的委託,那麼子類這招就行不通了。

注意:委派模式十分重要, Apple 提供的 API 裡面,基本上沒有事件這種東西存在,所以在 UIKit 中大量使用了委派模式來處理原本其他語言有支援的事件,基本上隨處可見。