[Python設(shè)計模式] 01 - 簡單工廠模式

設(shè)計模式的目的是讓代碼易維護(hù)艰争、易擴(kuò)展,不能為了模式而模式猜旬,因此一個簡單的工具腳本是不需要用到任何模式的脆栋。

簡單工廠模式又叫靜態(tài)工廠方法模式,工廠模式家族中最簡單的一種模式洒擦。這個模式的基本工作方式: 通過一個工廠來決定創(chuàng)建哪種具體的產(chǎn)品實例筹吐。

下面是一個簡單的工廠實例:

def create_animal(name):
    if name == 'dog':
        return Dog()
    elif name == 'cat':
        return Cat()

animal = create_animal('dog')
animal.eat('some food')

create_animal就是一個工廠,各種動物就是產(chǎn)品秘遏,該工廠根據(jù)name來決定產(chǎn)出什么動物產(chǎn)品丘薛。產(chǎn)品應(yīng)該具有一個基本特性,同一個工廠出產(chǎn)的所有產(chǎn)品都是一個系列邦危,都具有相同的功能洋侨,比如動物都吃食物。

簡單工廠模式的好處是可以將產(chǎn)品對象的細(xì)節(jié)封裝在其實現(xiàn)類的內(nèi)部倦蚪,改變一個產(chǎn)品對象具體實現(xiàn)不會影響其他產(chǎn)品希坚。可擴(kuò)展性強陵且,當(dāng)需要新增產(chǎn)品類型時裁僧,只需要添加對應(yīng)的實現(xiàn)類,然后修改工廠慕购,增加一個判斷分支即可聊疲。修改工廠函數(shù)帶來的風(fēng)險比較低。

另外一個比較典型的適合簡單工廠模式的例子是計算器沪悲,計算器需要支持各種計算操作获洲,比如加、減殿如、乘贡珊、除最爬、平方、立方门岔、平方根爱致、階乘等等。那么這里的工廠就是要創(chuàng)建各種操作算法對象寒随,每種操作算法對象都支持一個求值方法蒜鸡。

def create_operator(op):
    if op == '+':
        return AddOperation()
    elif op == '-':
        return SubOperation()
    elif op ==  '*':
        return MulOperation()
    elif op == '/':
        return DivOperation()

op = create_operator('+')
op.Calc(1, 2)

前面提到,每個工廠生產(chǎn)的產(chǎn)品都是一個系列的牢裳,因此產(chǎn)品類通常會從同一個抽象基類派生逢防,但不是必須的。

簡單工廠模式的組成要素

  • 工廠函數(shù)
    負(fù)責(zé)具體產(chǎn)品對象的創(chuàng)建工作蒲讯,是該模式的核心忘朝。當(dāng)場景比較復(fù)雜時,可能需要用一個工廠類來負(fù)責(zé)產(chǎn)品的創(chuàng)建判帮。
  • 產(chǎn)品的抽象接口或抽象類
    抽象所有產(chǎn)品的公共接口
  • 具體產(chǎn)品類
    抽象接口的具體實現(xiàn)類

缺點

  • 由于工廠類集中了所有實例的創(chuàng)建邏輯局嘁,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個工廠類中
  • 它所能創(chuàng)建的類只能是事先考慮到的晦墙,如果需要添加新的類悦昵,則就需要改變工廠類了
  • 當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時候,可能會出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實例的需求.這種對條件的判斷和對具體產(chǎn)品類型的判斷交錯在一起晌畅,很難避免模塊功能的蔓延但指,對系統(tǒng)的維護(hù)和擴(kuò)展非常不利;

使用場景

  • 工廠類負(fù)責(zé)創(chuàng)建的對象比較少抗楔;
  • 客戶只知道傳入工廠類的參數(shù)棋凳,對于如何創(chuàng)建對象(邏輯)不關(guān)心;
  • 由于簡單工廠很容易違反高內(nèi)聚責(zé)任分配原則连躏,因此一般只在很簡單的情況下應(yīng)用剩岳。

原文地址:http://www.isware.cn/python-design-pattern/01-simple-factory/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市入热,隨后出現(xiàn)的幾起案子拍棕,更是在濱河造成了極大的恐慌,老刑警劉巖勺良,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绰播,死亡現(xiàn)場離奇詭異,居然都是意外死亡郑气,警方通過查閱死者的電腦和手機幅垮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門腰池,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尾组,“玉大人忙芒,你說我怎么就攤上這事』淝龋” “怎么了呵萨?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跨跨。 經(jīng)常有香客問我潮峦,道長,這世上最難降的妖魔是什么勇婴? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任忱嘹,我火速辦了婚禮,結(jié)果婚禮上耕渴,老公的妹妹穿的比我還像新娘拘悦。我一直安慰自己,他們只是感情好橱脸,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布础米。 她就那樣靜靜地躺著,像睡著了一般添诉。 火紅的嫁衣襯著肌膚如雪屁桑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天栏赴,我揣著相機與錄音蘑斧,去河邊找鬼。 笑死须眷,一個胖子當(dāng)著我的面吹牛乌叶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柒爸,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼准浴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捎稚?” 一聲冷哼從身側(cè)響起乐横,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎今野,沒想到半個月后葡公,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡条霜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年催什,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宰睡。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒲凶,死狀恐怖气筋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旋圆,我是刑警寧澤宠默,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站灵巧,受9級特大地震影響搀矫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刻肄,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一瓤球、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敏弃,春花似錦冰垄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至隅要,卻和暖如春蝴罪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背步清。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工要门, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人廓啊。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓欢搜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谴轮。 傳聞我的和親對象是個殘疾皇子炒瘟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計模式的目的是讓代碼易維護(hù)、易擴(kuò)展第步,不能為了模式而模式疮装,因此一個簡單的工具腳本是不需要用到任何模式的。 簡單工廠...
    樊海鵬閱讀 207評論 0 0
  • 設(shè)計模式匯總 一粘都、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用廓推、多...
    MinoyJet閱讀 3,922評論 1 15
  • 1 場景問題# 1.1 選擇組裝電腦的配件## 舉個生活中常見的例子——組裝電腦,我們在組裝電腦的時候翩隧,通常需要選...
    七寸知架構(gòu)閱讀 4,304評論 6 66
  • 接到集合指令樊展,我披著金黃色的長發(fā)一路狂奔,順著一座長長的橋到達(dá)大殿,此時我已經(jīng)身著暗銀色的鎧甲专缠。我看著我們的王在...
    咖啡解藥閱讀 311評論 0 1
  • 2017/03/05【打卡】 12#夏天第304天1.記錄?羽毛球雷酪,看電影,寫作文藤肢,探望老師太闺,晚上快樂讀英語糯景。2....
    Grit888閱讀 113評論 0 0