通俗 Python 設計模式——工廠模式
今天講一下最簡單常用的建立型模式——工廠模式
。
工廠模式
,從名字上來講就已經說明了它的本質——像工廠一樣,根據得到的材料構造需要的產品。但是根據書上的介紹工廠模式
通常有兩種形式:一種工廠方法,一種是抽象工廠。我們分別來講述一下工廠模式
的這兩種形式。
通俗的解釋工廠方法
就是是:給出固定的介面,根據你的輸入,會得到與輸入相對應的輸出。也許這個說法還是不夠通俗,那麼我們來看一個例子。
在編寫一個web框架時,我們需要考慮到使用者可能會連線各種各樣的資料庫,但是我們不能預知使用者會使用哪個資料庫。於是我們提供一個通用方法,裡面包含了各個資料庫的連線方案,使用者在使用過程中,只需要傳入資料庫的名字並給出連線所需要的資訊,即可得到一個固定的 | 針對使用者所選資料庫的 | 連線字串。
如果還是不明白,那我們來看看程式碼好了:
def connect(db, *arg, **kwargs):
db = db.lower()
dbname = kwargs['db']
if db == 'mysql':
result = "mysql://{username}:{password}@{server}/{dbname}".format(username = kwargs['username'], password = kwargs['password'], server = kwargs['server'], dbname=dbname)
elif db == 'sqlite':
result = 'sqlite:///{server}{dbname}.sqlite'.format(server = kwargs['server'], dbname=dbname)
return result
如果使用者的輸入為 'MySQL', 那麼工廠方法會為其返回一個用於連線 MySQL 資料庫的連線字串;如果使用者的輸入為 'SQLite',那麼將會得到一個用於連線 SQLite 資料庫的連線字串;更多的則是同樣的原理。
所以現在大家看到了,其實這個方法非常初級非常暴力,就是無限的羅列需要考慮的情況並給出對應的處理而已。
現在我們來講講抽象工廠
。故名思議,它表示針對工廠方法
進一步抽象化,用於工廠方法
本身也需要抽象集中管理的情況。比如說書上的這個例子:
你在編寫一款面向全年齡的遊戲,遊戲本身需要使用工廠方法進行開發。但遊戲也需要考慮不同年齡段玩家的需求和口味不同,所以需要為不同年齡段的玩家針對遊戲進行一定的修改。於是在使用者輸入年齡後,執行符合其年齡的要求的遊戲。
這種情況下,我們建立遊戲內容的過程,可以使用工廠方法統一管理,但是針對建立符合哪個年齡段的遊戲內容,我們則需要進一步抽象出來管理,這種情況就是所謂的抽象工廠
。
不過Python中的抽象工廠與其他靜態語言的抽象工廠有一個小小的區別。得益於Python的靈活性,其型別實在執行中確定,即避免了其他靜態語言中必須要建立抽象類或介面的複雜動作。具體程式碼較長,這裡就不貼了,有興趣的朋友可以直接閱讀原書程式碼部分。
相關文章
- python設計模式-工廠方法模式Python設計模式
- python設計模式之工廠模式Python設計模式
- python設計模式-抽象工廠模式Python設計模式抽象
- 設計模式-工廠模式二(工廠方法模式)設計模式
- 【設計模式】工廠模式設計模式
- 設計模式 —— 工廠模式設計模式
- 設計模式-工廠模式設計模式
- 設計模式(工廠模式)設計模式
- 設計模式——工廠模式設計模式
- 設計模式----工廠模式設計模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式----工廠設計模式設計模式
- 設計模式-工廠設計模式設計模式
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 【Python設計模式】03 工廠模式:建立建立物件的工廠Python設計模式物件
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 設計模式學習(二)工廠模式——抽象工廠模式設計模式抽象
- 設計模式——抽象工廠模式設計模式抽象
- 設計模式 —— 抽象工廠模式設計模式抽象
- PHP設計模式-- 工廠模式PHP設計模式
- 設計模式-抽象工廠模式設計模式抽象
- Java設計模式(工廠模式)Java設計模式
- Java設計模式--工廠模式Java設計模式
- Java 設計模式(工廠模式)Java設計模式
- java設計模式-工廠模式Java設計模式
- 設計模式 - 工廠方法模式設計模式
- 設計模式之工廠模式設計模式
- java設計模式 – 工廠模式Java設計模式
- 設計模式 #2 (工廠模式)設計模式
- 設計模式之【工廠模式】設計模式
- 設計模式-工廠方法模式設計模式
- 設計模式~~~工廠方法模式設計模式
- PHP設計模式_工廠模式PHP設計模式
- 設計模式——工廠方法模式設計模式
- 設計模式(四)工廠模式設計模式
- Java設計模式:工廠模式Java設計模式
- 設計模式(三)——工廠模式設計模式