python patterns
1.0.0
Python 中的設計模式和習慣用法的集合。
請記住,每種模式都有其自身的權衡。您需要更多地關注為什麼選擇某種模式,而不是如何實現它。
創作模式:
圖案 | 描述 |
---|---|
抽象工廠 | 對特定工廠使用通用函數 |
博格 | 實例之間具有共享狀態的單例 |
建設者 | 建構器物件不使用多個建構函數,而是接收參數並傳回建構對象 |
工廠 | 委託專門的函數/方法來建立實例 |
惰性評估 | Python 中的延遲評估屬性模式 |
水池 | 預實例化並維護一組相同類型的實例 |
原型 | 使用工廠和原型的複製來建立新實例(如果實例化成本昂貴) |
結構模式:
圖案 | 描述 |
---|---|
三層 | 資料<->業務邏輯<->表示分離(嚴格關係) |
適配器 | 使用白名單使一個介面適應另一個接口 |
橋 | 客戶端-提供者中間人,以軟化介面更改 |
合成的 | 讓客戶統一對待單一物件和組合 |
裝飾者 | 將功能與其他功能包裝在一起以影響輸出 |
正面 | 使用一個類別作為許多其他類別的 API |
蠅量級 | 透明地重複使用具有相似/相同狀態的物件的現有實例 |
前端控制器 | 傳入應用程式的單一處理程序請求 |
管理控制台 | 模型<->視圖<->控制器(非嚴格關係) |
代理人 | 對象將操作集中到其他對象 |
行為模式:
圖案 | 描述 |
---|---|
責任鏈 | 應用一系列連續的處理程序來嘗試處理數據 |
目錄 | 通用方法將根據建構參數呼叫不同的專用方法 |
連結方法 | continue 回調下一個物件方法 |
命令 | 捆綁命令和參數以供稍後調用 |
迭代器 | 遍歷容器並存取容器的元素 |
迭代器(替代實作) | 遍歷容器並存取容器的元素 |
調解人 | 知道如何連接其他對象並充當代理的對象 |
紀念 | 產生一個不透明的令牌,可用來返回到先前的狀態 |
觀察者 | 提供事件/資料變更通知的回調 |
發布_訂閱 | 來源將事件/資料聯合到 0+ 個註冊監聽器 |
註冊表 | 追蹤給定類別的所有子類 |
規格 | 可以透過使用布林邏輯將業務規則連結在一起來重新組合業務規則 |
狀態 | 邏輯被組織成離散數量的潛在狀態和可以轉換到的下一個狀態 |
策略 | 相同資料的可選擇操作 |
範本 | 物件強加了一種結構,但採用可插入組件 |
遊客 | 對集合中的所有項目呼叫回調 |
可測試性模式設計:
圖案 | 描述 |
---|---|
依賴注入 | 依賴注入的 3 種變體 |
基本模式:
圖案 | 描述 |
---|---|
委託模式 | 一個物件透過委託給第二個物件(委託)來處理請求 |
其他的:
圖案 | 描述 |
---|---|
黑板 | 架構模型,組裝不同的子系統知識來建構解決方案,AI方法-非四幫模式 |
圖表搜尋 | 繪圖演算法 - 非四組模式 |
HSM | 分層狀態機 - 非四組模式 |
Python 中的設計模式作者:Peter Ullrich
Sebastian Buczyński - 為什麼不需要 Python 中的設計模式?
你不需要那個!
透過設計模式的可插入庫
新增或修改實作時,請查看以下準則:
以文件字串的形式新增模組層級描述,並包含指向對應參考資料或其他有用資訊的連結。
如果您了解一些,請添加“Python 生態系統中的範例”部分。它展示瞭如何將模式應用於現實世界的問題。
facade.py 有一個很好的詳細描述範例,但有時 template.py 中較短的範例就足夠了。
若要查看某些模式的 Python 2 相容版本,請查看舊版標籤。
當其他一切完成後 - 更新自述文件的相應部分。
請在提交補丁之前執行以下命令
black .
這會檢查您的程式碼。然後:
tox
或tox -e ci37
這將運行單元測試。請參閱 tox.ini 以了解更多詳細資訊。./lint.sh
該腳本將 lint 並測試您的程式碼。該腳本反映了 CI 管道操作。您也可以手動執行flake8
或pytest
命令。範例可以在tox.ini
中找到。
您可以對問題和拉取請求進行分類,其中可能包括複製錯誤報告或詢問重要訊息,例如版本號或複製說明。如果您想開始對問題進行分類,簡單的入門方法是在 CodeTriage 上訂閱 python-patterns。
Mutable.ai 的人員建構了一個具有程式碼庫感知能力的人工智慧助理。嘗試一下