python 設計模式

2021-10-04 19:05:35 字數 1305 閱讀 7054

python挺靈活的,很多設計方式用 python 實現起來非常自然。

我們從實際中發現設計模式,而不是發明設計模式。

設計模式就是從實際中提煉出來的常用實踐,為了盡可能復用**,用最少的**實現功能。

客戶端**可以以統一的呼叫方式,得到不同工廠建立出來的例項。

客戶端**可以以統一的呼叫方式,得到不同工廠建立出來的例項;並且客戶端**使用不同工廠的產品的呼叫方式一致;統一工廠中各個產品之間的相互呼叫方式一致。

構建物件,需要有多步組成。這多個步驟之間可能有先後關係,也可能沒有。

建設者用於完成具體的每一步。

指揮者用於定義構建物件,都需要哪些步驟,先做哪一步,再做哪一步。

很容易理解,有時候我們需要乙個副本。

python 中可以通過 copy.copy() 和 copy.deepcopy() 原型設計模式。

客戶端**呼叫方式不能變;被呼叫的第三方**不能變。所以我們需要在兩者之間實現 adapter 使得客戶端**能夠呼叫第三方包。

內部結構很複雜,但是提供簡單的乙個使用介面給客戶端**。

比如通常乙個 python 包(比如說 gunicorn)裡面有很多類。但是最重要的方法,會寫到包的 __init__.py 這樣初級使用者簡單學習下,就能使用包。

為了減小記憶體暫用。而共用物件。

比如要在圖形介面建立1萬棵蘋果樹,1萬棵梨樹。不必建立2萬個物件。抽象出蘋果樹的共性和梨樹的共性。建立兩個物件就可以了。

model: 負責儲存資料。

view:負責呈現資料。

control:負責聯絡 model 和 view。

**模式和裝飾器模式很相似。

區別見 。

在 python 中基本可以使用 decorator 和 descriptor 來實現。

指令的生成和使用不必放到一起。

客戶**可以更好的編排指令的執行。

要自定義dsl 供高階使用者使用。我對這個模式無感。

狀態機,重點在於定義有哪些狀態,狀態如何轉化。

python 中第三方包 django-fsm 和 state_machine 為實現狀態機提供了便利。

乙個物件狀態改變能通知到所有相關者。訂閱者可以動態改變。

對同乙個問題,需要使用多種演算法解決時,可以考慮策略模式。

其實就是把演算法當成引數。

如果兩段**大部分相似,只有少部分不同。可以把這少部分不同提取出來作為引數(引數值為一段**)。

Python設計模式 狀態設計模式

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

python設計模式 原形設計模式

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

Python 設計模式

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