Managers

概述

管理器模式

Managers提供一個統一的接口,用于管理和訪問一組相關對象的實例化和訪問,使得管理職責的變化獨立于某個具體類。是管理其他實例類的 管理者,某些場景也可以充當MVC中的C的角色。(其實是單利模式的擴展,就是自己mange自己,并且確保被管理者是唯一的)在Cocoa 或者Cocoa Touch中包括NSFileManager、NSInputManager、NSLayoutManager等類。

結構

參與者
Subject(也可以理解成單一功能的manger)
  • 領域對象。
  • 提供 Client 需要的領域服務。
Manager(當管理多個manger時候,這個最外層manger一般要求唯一的單例)
  • Manager 類是唯一負責創建和銷毀 Subject 對象的類。它負責跟蹤和管理 Subject 對象。
  • 典型的管理職責包括根據指定的 Key 搜索 Subject 對象。
  • 因為 Subject 對 Manager 無引用,所以 Manager 可根據需要修改或子類化。
Client
  • 從 Manager 對象獲取 Subject 對象。
  • 使用 Subject 的領域服務。

適用性

我們來討論一下使用場景。有一組對象需要是唯一的,但同時不是單例對象的情況,這是很常見的。比如字體(比如方正雅黑之類的)。系統需要使用不同的字體,所以封裝的字體對象可能會多次實例化,因此不能用單例。但同時,我們又不希望同一個字體同時出現多個實例。
這樣我們就希望,請求特定的字體類型返回特定的實例,同時也希望添加了字體系統可以了解到(CTFontManagerRegisterGraphicsFont)。

當以下情況成立時可以使用 Manager 模式:
  • 當需要對同一個類的所有的對象進行操作時。
  • 當需要按需的創建和銷毀對象時。
  • 當需要控制對象的生命周期時。

效果

  • 可以對全部對象進行統計。
  • 管理職責可以無依賴的變化。
  • 可以按需替換管理職責。
  • 管理職責可以得到重用

討論

管理者模式是其他一些模式(如單例、外觀和控制器)的融合與一般化。許多管理者在應用程序內執行類似于控制器的功能。 在Cocoa中遇到以“Manager”結尾的類名時,就暗示了它的一個或多個角色。在自定義的代碼中,當需要用于管理其他類的多個實例的類時,要想解耦推薦使用管理者,尤其是在需要確保唯一性時。例如某個控制器里會各種類似功能的實體,那么就可以抽象出一個manger來管理這些實體(Subject),manger開放client提供Register UnRegister接口。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容