Python設計模式

2021-08-28 18:17:20 字數 3038 閱讀 5163

工廠模式,原型模式,介面卡模式,裝飾器模式,外觀模式,享元模式,mvc模式,**模式,責任鏈模式,命令模式,

直譯器模式,發布訂閱模式,狀態模式,策略模式,模板模式,單例模式

工廠模式:解決物件建立問題;

構造模式:控制複雜物件的構造;

原型模式:解決物件拷貝問題,這是建立模式中的最後乙個,用來轉殖乙個物件,有點像生物學中的有絲**。我們可以使用python內建的copy模組實現。拷貝分為深拷貝和淺拷貝深拷貝會遞迴複製並建立新物件,而淺拷貝利用引用指向同乙個物件.深拷貝的優點是物件之間互不影響,但是會耗費資源,建立比較耗時;如果不會修改物件可以使用淺拷貝,更加節省資源和建立時間。

介面卡模式解決介面不相容問題,結構型設計模式通過組合物件來實現新功能。介面卡模式通過引入間接層來實現不相容介面之間的適配。在python中可以通過繼承實現適配,也可以通過使用class的__dict__屬性。 開閉原則:介面卡模式和oop中的開閉原則關係密切,開閉原則強調對擴充套件開放,對修改關閉。通過介面卡模式我們可以通過建立介面卡模式在不修改原有類**的情況下實現新的功能。

裝飾器模式無需子類化實現擴充套件物件功能問題;通常給乙個物件新增新功能有三種方式: - 直接給物件所屬的類新增方法。 - 使用『組合』 - 使用『繼承』,優先使用組合而非繼承。裝飾器模式提供了第四種選擇,通過動態改變物件擴充套件物件功能。其他程式語言通常使用繼承實現裝飾器模式,而python內建了裝飾器。裝飾器有很多用途,比如資料校驗,事務處理,快取,日誌等。比如用裝飾器實現乙個簡單的快取,python3.5自帶了functools.lru_cache。

外觀模式簡化複雜物件的訪問問題;外觀模式用來簡化複雜系統的訪問。通過簡化的介面只訪問需要的部分,隱藏系統複雜性。想象一下公司接線員,雖然公司內部執行機制比較複雜,但是接線員可以迅速幫你解決特定問題

享元模式:實現物件復用從而改善資源使用;oop程式設計中容易出現物件建立帶來的效能和記憶體占用問題,原因有需要使用大量物件,物件太多難以儲存或解析大量物件,物件識別不是特別重要,共享物件中物件比較會失敗,經常使用物件池技術來實現共享物件,比如資料庫中經常使用連線池來減少開銷,預先建立一些連線池,每次取乙個連線和資料庫互動。

mvc模式:the model-view-controller pattern ,解耦展示邏輯和業務邏輯;mvc模式既是一種設計模式,也是軟體架構模式。django框架就是mvc(mtv)模式。model層負責和資料庫互動view層負責展示邏輯controller負責粘合model和view層,將各部分解耦,使**更易擴充套件和維護。

**模式:通過一層間接保護層實現更安全的介面訪問;四種常見**模型:remote proxy.使得訪問遠端物件就像本地訪問一樣,例如網路伺服器。隱藏複雜性,使得訪問本地遠端統一。比如orm;virtual proxy。用來實現延遲訪問,比如一些需要複雜計算的物件,python裡可以實現lazy_property,效能改善;protection/protective proxy. 控制敏感物件的訪問,加上一層保護層,實現安全控制;smart(reference) proxy. 訪問物件時加上一層額外操作,例如引用計數和執行緒安全檢查,例如weakref.proxy()

責任鏈模式:建立鏈式物件用來接收廣播訊息;行為型設計模式處理物件之間的互動和演算法問題。在責任連模式中,我們把訊息傳送給一系列物件的首個節點,物件可以選擇處理訊息或者向下乙個物件傳遞,只有對訊息感興趣的節點處理。用來解耦傳送者和接收者。

命令模式:用來給應用新增undo操作;命令模式幫助我們乙個操作(undo,redo,copy,paste等)封裝成乙個物件,通常是建立乙個包含operation所有邏輯和方法的類。 通過命令模式可以控制命令的執行時間和過程,還可以用來組織事務。

直譯器模式:用來實現dsl (domain specific language);

發布訂閱模式:用來處理多個物件之間的發布訂閱主題;該模式用在當乙個物件的狀態變更需要通知其他很多物件的時候,比如rss訂閱或者在社交**上訂閱某個頻道的更新。事件驅動系統也是一種發布訂閱模式,事件作為發布者,***作為訂閱者,只不過這裡多個事件***可以監聽同乙個事件。

狀態模式:實現有限狀態機;

策略模式:動態選擇演算法策略,

模板模式:抽象出演算法公共部分從而實現**復用

單例模式:使得乙個類最多生成乙個例項。

Python設計模式 狀態設計模式

狀態設計模式的簡單示例 優缺點乙個物件可以基於其內部狀態封裝多個行為。狀態模式可以看作在執行時改變物件行為的一種方式。以收音機為例進行說明。收音機具有am fm 切換開關 兩種調頻方式和乙個掃瞄按鈕。因此根據收音機的基本狀態 am fm 當調諧到am或fm頻道時,掃瞄按鈕的行為就會動態的改變。con...

python設計模式 原形設計模式

一 什麼是原形設計模式 原型設計模式 prototype design pattern 幫助我們建立物件的轉殖,其最簡單的形式就是一 個clone 函式,接受乙個物件作為輸入引數,返回輸入物件的乙個副本。在python中,這可以 使用copy.deepcopy 函式來完成。二 應用案例 三 實現使用...

Python 設計模式

例項 類 類工廠 簡單來說就是把一些具有相同方法的類再進行封裝,抽象共同的方法以供呼叫.是工廠方法的高階版本.例項 類 類工廠 抽象工廠 這個python裡可以使用 property實現,就是當呼叫的時候才生成.builder模式主要用於構建乙個複雜的物件,但這個物件構建的演算法是穩定的,物件中的各...