【設(shè)計(jì)模式】工廠方法模式

概念

簡(jiǎn)單工廠模式的最大優(yōu)點(diǎn)在于工廠類中包含了必要的邏輯判斷,根據(jù)客戶端的選擇條件動(dòng)態(tài)實(shí)例化相關(guān)的類橙依,對(duì)于客戶端來說,去除了與具體產(chǎn)品的依賴硕旗。
也就是說窗骑,如果需要增加一個(gè)運(yùn)算,那么除了增加一個(gè)類以外漆枚,還要修改工廠创译。這樣就違背了開放-封閉原則。

工廠方法模式墙基,定義一個(gè)用于創(chuàng)建對(duì)象的接口软族,讓子類決定實(shí)例化哪一個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到其子類残制。

根據(jù)依賴倒轉(zhuǎn)原則立砸,把工廠類抽象出一個(gè)接口,這個(gè)接口只有一個(gè)方法初茶,就是創(chuàng)建抽象產(chǎn)品的工廠方法仰禽。然后,所有的要生產(chǎn)具體類的工廠,就去實(shí)現(xiàn)這個(gè)接口吐葵,這樣规揪,一個(gè)簡(jiǎn)單工廠模式的工廠類,變成了一個(gè)工廠抽象接口和多個(gè)具體生成對(duì)象的工廠温峭。于是 猛铅,要增加一個(gè)功能的時(shí)候,就不需要更改原有的工廠類了凤藏,只需要增加此功能的運(yùn)算類和相應(yīng)的工廠類就可以了奸忽。

工廠方法模式實(shí)現(xiàn)時(shí),客戶端需要決定實(shí)例化哪一個(gè)工廠來實(shí)現(xiàn)運(yùn)算類揖庄,選擇判斷的問題還是存在的栗菜,也就是說,工廠方法把簡(jiǎn)單工廠的內(nèi)部邏輯判斷轉(zhuǎn)移到客戶端代碼來進(jìn)行蹄梢。要增加功能疙筹,原來改工廠類的,現(xiàn)在是修改客戶端禁炒。

雷鋒工廠

薛磊風(fēng)作為一個(gè)大學(xué)生而咆,以學(xué)雷鋒做好事的名義去幫助老人做事,如何設(shè)計(jì)幕袱?

# /usr/bin/python
# coding=utf-8

class LeiFeng:
    def sweep(self):
        print "掃地"

    def wash(self):
        print "洗碗"

    def buyrice(self):
        print "買米"


class undergraduate(LeiFeng):
    pass


student1 = undergraduate()
student1.buyrice()
student1.sweep()
student1.wash()

增加一個(gè)“社區(qū)志愿者”類

# /usr/bin/python
# coding=utf-8

class LeiFeng:
    def sweep(self):
        print "掃地"

    def wash(self):
        print "洗碗"

    def buyrice(self):
        print "買米"


class undergraduate(LeiFeng):
    pass


class volunteer(LeiFeng):
    pass


class simpleFactory:
    @staticmethod
    def createleifeng(type):
        switcher = {
            "學(xué)雷鋒的大學(xué)生": undergraduate(),
            "社區(qū)志愿者": volunteer()
        }
        return switcher[type]


studentA = simpleFactory.createleifeng("學(xué)雷鋒的大學(xué)生")
studentA.buyrice()
studentB = simpleFactory.createleifeng("學(xué)雷鋒的大學(xué)生")
studentA.sweep()
studentC = simpleFactory.createleifeng("學(xué)雷鋒的大學(xué)生")
studentC.wash()

需要在任何實(shí)例化的時(shí)候?qū)懗鲞@個(gè)工廠的代碼暴备,有過多重復(fù)。

# /usr/bin/python
# coding=utf-8


class leifeng:
    def sweep(self):
        print "掃地"

    def wash(self):
        print "洗碗"

    def buyrice(self):
        print "買米"


class undergraduate(leifeng):
    pass


class volunteer(leifeng):
    pass


class IFactory:
    def createleifeng(self):
        pass


class undergraduateFactory(IFactory):
    def createleifeng(self):
        return undergraduate()


class volunteerFactory(IFactory):
    def createleifeng(self):
        return volunteer()


factory = undergraduateFactory()
student = factory.createleifeng()
student.sweep()
student.buyrice()
student.wash()
工廠方法模式結(jié)構(gòu)圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末们豌,一起剝皮案震驚了整個(gè)濱河市涯捻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌望迎,老刑警劉巖汰瘫,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異擂煞,居然都是意外死亡混弥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門对省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝗拿,“玉大人,你說我怎么就攤上這事蒿涎“校” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵劳秋,是天一觀的道長(zhǎng)仓手。 經(jīng)常有香客問我胖齐,道長(zhǎng),這世上最難降的妖魔是什么嗽冒? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任呀伙,我火速辦了婚禮,結(jié)果婚禮上添坊,老公的妹妹穿的比我還像新娘剿另。我一直安慰自己,他們只是感情好贬蛙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布雨女。 她就那樣靜靜地躺著,像睡著了一般阳准。 火紅的嫁衣襯著肌膚如雪氛堕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天野蝇,我揣著相機(jī)與錄音讼稚,去河邊找鬼。 笑死浪耘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的塑崖。 我是一名探鬼主播七冲,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼规婆!你這毒婦竟也來了澜躺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤抒蚜,失蹤者是張志新(化名)和其女友劉穎掘鄙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗡髓,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡操漠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饿这。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浊伙。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖长捧,靈堂內(nèi)的尸體忽然破棺而出嚣鄙,到底是詐尸還是另有隱情,我是刑警寧澤串结,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布哑子,位于F島的核電站舅列,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏卧蜓。R本人自食惡果不足惜帐要,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烦却。 院中可真熱鬧宠叼,春花似錦、人聲如沸其爵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摩渺。三九已至简烤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摇幻,已是汗流浹背横侦。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绰姻,地道東北人枉侧。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像狂芋,于是被迫代替她去往敵國(guó)和親榨馁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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

  • 設(shè)計(jì)原則: 要依賴抽象帜矾,不要依賴具體類 目錄 本文的結(jié)構(gòu)如下: 什么是工廠方法模式 為什么要用該模式 模式的結(jié)構(gòu) ...
    w1992wishes閱讀 1,344評(píng)論 0 6
  • 工廠方法模式 介紹 簡(jiǎn)單工廠模式雖然簡(jiǎn)單翼虫,并且實(shí)現(xiàn)了創(chuàng)建和使用分離的功能,但存在一個(gè)很嚴(yán)重的問題屡萤。當(dāng)系統(tǒng)中需要引入...
    666真666閱讀 275評(píng)論 0 1
  • 簡(jiǎn)單工廠模式(Simple Factory Pattern) 定義一個(gè)工廠類珍剑,可以根據(jù)參數(shù)的不同返回不同類的實(shí)例,...
    ghwaphon閱讀 1,140評(píng)論 5 9
  • 這一篇博文來介紹工廠模式中的第二種工廠方法模式死陆。 介紹 工廠方法模式(Factory Method Pattern...
    東西的南北閱讀 290評(píng)論 0 1
  • 決心減肥招拙! 今天是第一天,堅(jiān)持措译。 走路上班迫像;7分飽;多喝水瞳遍;下午一杯蜂蜜柚子茶闻妓。
    huangfangyuan閱讀 133評(píng)論 0 0