1. 程式人生 > Android開發 >?iOS設計模式

?iOS設計模式

忘記是哪位大哥說的了。大概意思如下:

設計模式,一個一個學,等到明白後,全部忘掉,揉碎,分散。

就像張無忌跟張三豐學太極時,全部忘掉,才算是學會了。

?白話對設計模式六大原則的理解

建立型模式

  • 建立型模式在建立什麼(What),由誰建立(Who),何時建立(When)等方面都為軟體設計者提供了儘可能大的靈活性。

  • 建立型模式隱藏了類的例項的建立細節,通過隱藏物件如何被建立和組合在一起達到使整個系統獨立的目的。

  • 說明:建立物件時,使用到的模式

  • 關鍵字:build、構建、構造、建立、工廠模式

一、簡單工廠模式

二、工廠設計模式

  • 場景:生產單一型別產品(大量,分給不同工廠製造)
  • 角色:抽象工廠、工廠、抽象產品、具體產品
  • 參見工廠模式三兄弟

三、抽象工廠模式

  • 場景:生產多種型別產品(大量,分給不同工廠製造)
  • 角色:抽象工廠、工廠、抽象產品多種、具體產品多種
  • 參見工廠模式三兄弟

四、建設者模式

  • 通過KFC點餐來學習建造者模式

五、單例模式

  • 場景:單一、重複使用、頻繁使用
  • 注意:有些資源不再需要時,或者收到記憶體警告時,主動釋放
  • 示例:XXManager,XXServer,UserDefault

結構型模式

  • 說明:某一個功能比較複雜時,如何可複用\組合形成複雜的、功能更為強大的結構
  • 關鍵字:框架、解耦、隔離、組合、結構
  • 結構型模式可以分為類結構型模式和物件結構型模式
    • 類結構型模式關心類的組合,由多個類可以組合成一個更大的
    • 物件結構型模式關心類與物件的組合,通過關聯關係使得在一 個類中定義另一個類的例項物件,然後通過該物件呼叫其方法。 根據“合成複用原則”,在系統中儘量使用關聯關係來替代繼 承關係,因此大部分結構型模式都是物件結構型模式。

一、介面卡模式

二、橋接模式

三、裝飾器模式

  • 說明:動態的擴充套件方法、功能
  • 示例:extension、delegate

四、外觀模式

  • 說明:減少不同類之間的互動,提供統一介面

  • 示例:比如獲取資源類中,需要呼叫本地快取、網路資料,實現隔離減少不同類之間的互動

  • 程式碼: https://www.raywenderlich.com/477-design-patterns-on-ios-using-swift-part-1-2#toc-anchor-007

五、代理模式

  • 說明:先佔坑,後操作
  • 示例:耗時操作,圖片非同步載入

六、享元模式

  • 說明:快取系統,快取在記憶體中、大量重複使用適合顆粒度較小的東西
  • 示例:未知

行為型模式

  • 說明:通過相互通訊與協作完成某些複雜功能,一個物件在執行時也將影響到其他物件的執行

  • 關鍵字:觀察、通知、MVC、反饋、監控

  • 行為型模式分為類行為型模式和物件行為型模式兩種:

    • 類行為型模式:類的行為型模式使用繼承關係在幾個類之間分配行為,類行為型模式主要通過多型等方式來分配父類與子類的職責。
    • 物件行為型模式:物件的行為型模式則使用物件的聚合關聯關係來分配行為,物件行為型模式主要是通過物件關聯等方式來分配兩個或多個類的職責。根據“合成複用原則”,系統中要儘量使用關聯關係來取代繼承關係,因此大部分行為型設計模式都屬於物件行為型設計模式。

一、命令模式

  • 說明:把命令抽象成物件,具體的命令物件,給外界提供介面,同時負責命令的執行
  • 設計模式系列 6-- 命令模式

二、中介者模式

  • 說明:A、B之間不交流,通過C來完成溝通,
  • 示例:比如MVC中的 Model、View不直接交流,而是通過Controller交流;現實生活中的中介公司,乾的就是這個活,Controller處理的事情太多,會變的越來越複雜,臃腫,這種模式的弊端也是如此。
  • 設計模式系列3--中介者模式

三、觀察者模式

  • 說明:主動觀察到狀態改變,從而發生變化
  • 示例:KVO、Notification

四、狀態模式

  • 說明:允許一個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。
  • 設計模式系列9--狀態模式
  • 個人理解:假如在不同狀態下,可能有同樣的操作,這時把狀態封裝成類,把操作定義成協議,每個狀態類遵守這個協議,並實現。

五、策略模式

  • 說明:定義一系列演演算法,把它們一個個的封裝起來,並且使他們可以相互替換。策略模式使得演演算法可獨立於使用它的客戶端而變化。
  • 示例1:設計模式系列8--策略模式
  • 示例2:X模組中有個分段函式,A、B、C需要X模組支援,但是對X模組中的分段函式有不同要求,這時,你可以在X模組中寫if、else語句、或者switch語句,但這樣違反開閉原則,所以,更好的方式是把函式演演算法封裝起來,作為引數傳進去。

參考

  • https://juejin.im/user/57a94bc66be3ff00654b07d3/posts
  • https://design-patterns.readthedocs.io/zh_CN/latest/index.html