16種python設計模式使用場景、特點簡述

++設計模式是在已有的方案之上發現更好的方案,而不是全新發明,不要爲了強迫自己使用已有的設計模式而限制了你的創造力++


創建型模式

處理對象創建相關問題

1 工廠模式

1.1 工廠方法

==一個函數==,對不同的輸入參數返回不同的對象
- 集中在一個地方創建對象,方便對對象的追蹤
- 解耦創建對象-使用對象
- 在必要時才創建新對象,提高性能和內存使用率

1.2 抽象工廠

同屬於==單個類==的許多工廠方法用於創建==一系列==種類的相關對象,每個工廠方法負責生產不同種類的對象

2 建造者模式

  • 想要創建一個由多個部分構成的對象,而且它的構成需要一步接一步完成,只有每個部分都創建好,這個對象纔是完整的。
  • 當這個構造過程可以產生不同的表現,就可以試用建造者模式。
  • 與工廠模式的區別:工廠模式以單個步驟創建對象,建造者模式以多個步驟創建對象;工廠模式會立刻返回一個創建好的對象,建造者模式僅在需要時才顯示地請求指揮者返回最終的對象。

與工廠模式相比,以下情況建造者模式更好:
- 創建一個複雜對象(對象由多個部分構成,且對象的創建要經過多個不同的步驟,這些步驟也許還要遵從特定的順序)
- 要求一個對象能有不同的表現,且對象的構建與表現解耦
- 想要在某個時間點創建對象,但是在稍後的時間點再訪問

3 原型模式

用於創建對象的完全副本
- copy.copy() 創建淺副本,副本依賴引用
- copy.deepcopy() 創建深副本,副本複製所有東西,此時需要關注因對象克隆而引入的資源耗用問題。


機構型模式

4 適配器模式

  • 處理一個系統中的不同實體之間的關係,關注的是提供一種簡單的對象組合來創造新功能。
  • 比如:使用該模式讓多個接口兼容。

5 修飾器模式

  • 與繼承相比,通常應該優選組合,因爲繼承會使代碼更難複用。
  • python裝飾器比修飾器模式能做的更多,其中之一就是實現修飾器模式。
  • 比如:使用裝飾器來擴展一個對象的行爲

6 外觀模式

  • 有助於隱藏系統內部的複雜性,並通過一個簡易的接口向客戶端暴露必要的部分。
  • 外觀封裝內部系統

7 享元模式

  • 通常爲相似對象引入數據共享來最小化內存使用,提示性能。
  • 旨在優化性能和內存使用。
  • 關注的是共享對象數據
  • 一般來說,在應用需要創建大量的計算代價但共享許多屬性的對象時,可以使用享元模式,重點在於將不可變(可共享)的屬性與可變的屬性區別開

8 模型-視圖-控制器模式 MVC模式

關注點分離 SoC Separation of Concerns 原則
- 中心思想是:將一個應用切分成不同的部分,每個部分解決一個單獨的關注點
- 分層設計中的層次(數據訪問層,業務邏輯層,表示層等)即是關注點

模型、視圖、控制器
- 模型負責訪問數據,管理應用的狀態
- 視圖是模型的外在表現,視圖並非必須是圖形化的,文本輸出也可以
- 控制器是模型與視圖之間的連接

9 代理模式

在訪問某個對象之前執行一個或多個重要的操作,比如ORM是關係型數據庫的代理
四種代理模式如下:
- 遠程代理:代表一個活躍於遠程位置(例如遠程服務器或雲服務)的對象
- 虛擬代理:講一個對象的初始化延遲到真正需要時使用
- 保護/防護代理:用於對處理敏感信息的對象進行訪問控制
- 智能/引用代理:通過添加幫助信息(比如引用計數)來擴展一個對象的行爲


行爲模式

10 責任鏈模式

  • 責任鏈模式用於讓多個對象來處理單個請求時,或者用於預先不知道應該由哪個對象來處理某個特性請求時。
  • 發送方可以直接訪問鏈中的首個節點。若首個節點不能處理請求,則轉發給下一個節點,直到請求被某個節點處理或者整個鏈遍歷結束
  • 可以實現發送發與多個接收方之間的解耦

原則:
- 存在一個對象鏈(鏈表,樹或者任何其他便捷的數據結構)
- 一開始將請求發送給鏈中的第一個對象
- 對象決定其是否處理該請求
- 對象將請求轉發給下一個對象
- 重複該過程,指導達到鏈尾

11 命令模式

  • 將一個操作封裝成一個對象
  • 調用命令的對象與執行命令的對象解耦

12 解釋器模式

13 觀察者模式

14 狀態模式

15 策略模式

16 模板模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章