python設計模式

2021-10-02 18:06:01 字數 1476 閱讀 7925

目錄

第一部分  建立型模式

一、工廠模式

二、建造者模式

三、原型模式

第二部分  結構型模式

第三部分  行為型模式

工廠通常有兩種形式:一種是

工廠方法

,它是乙個方法

,對不同的輸入引數返回不同的物件

;第 二種是抽象工廠,它是一組用於建立一系列相關事物物件的工廠方法。

工廠方法集中地在乙個地方建立物件,使物件跟蹤變得更容易。注意,建立多個工廠方法也完全沒有問 題,實踐中通常也這麼做,對相似的物件建立進行邏輯分組,每個工廠方法負責乙個分組。建立物件時,我們並沒有與某個特定類耦合/

抽象工廠設計模式是抽象方法的一種泛化。概括來說,乙個抽象工廠是(邏輯上的)一組工廠方法,其中的每個工廠方法負責產生不同種類的物件。這樣會產生乙個問題:我們怎麼知道何時該使用工廠方法,何時又該使用抽象工廠?答案是,通常一開始時使用工廠方法,因為它更簡單。如果後來發現應用需要許多任務廠方法,那麼將建立一系列物件的過程合併在一起更合理,從而最終引入抽象工廠。

如我們所需要的物件由多個部分組成,而且他的構成需要一步接一步的完成,只有每個部位都建立好,這個物件才是乙個完整的物件,這正是建立者模式的用武之地。

該模式中,有兩個參與者:建造者

(builder

) 和指揮者

(director

)。建造者負責建立複雜物件的各個組成部分。在

html

例子中,這些組成部 分是頁面標題、文字標題、內容主體及頁尾。指揮者使用乙個建造者例項控制建造的過程。對於 html示例,這是指呼叫建造者的函式設定頁面標題、文字標題等。使用不同的建造者例項讓我 們可以建立不同的html

頁面,而無需變更指揮者的**。

原型模式就是副本模式,幫助我們建立物件的轉殖,其最簡單的形式就是乙個clone()

函式,接受乙個物件作為輸入引數,返回輸入物件的乙個副本。在

python

中,這可以使用copy.deepcopy()

函式來完成。很多python應用都使用了原型模式,例如視覺化工具套件。

副本又可以進一步分為深副本與淺副本。深副本就是我們在本章中到目前為止所看到的:原始物件的所有資料都被簡單地複製到轉殖物件中,沒有例外。淺副本則依賴引用。我們可以引入資料共享和寫時複製一類的技術來優化效能(例如,減小轉殖物件的建立時間)和記憶體使用。如果可用資源有限(例如,嵌入式系統)或效能至關重要(例如,高效能計算),那麼使用淺副本可能更佳。在python

中,可以使用

copy.copy()

函式進行淺複製。以下內容引用自

python

官方文件,說明了淺副本(copy.copy()

)和深副本(

copy.deepcopy())之間的區別

淺副本構造乙個新的復合物件後,(會盡可能地)將在原始物件中找到的物件的引用插入新物件中。

深副本構造乙個新的復合物件後,會遞迴地將在原始物件中找到的物件的副本插入新物件中。

Python設計模式 狀態設計模式

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

python設計模式 原形設計模式

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

Python 設計模式

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