第八章 雷鋒依然在人間 - 工廠方法模式

這一章講的是簡單工廠模式和工廠方法模式的比較劲阎。
????先是說袁串,小菜有個同學(xué)薛磊風(fēng)(學(xué)雷鋒),平時默默無聞倍权,一天不幸出了車禍掷豺,然后同學(xué)們就去醫(yī)院看望他,才知道他三年如一日地為一位孤寡老人做好事薄声,然后他現(xiàn)在住院了嘛当船,就拜托小菜他們替他照顧一下老人家。
????坦白講呢默辨,如果是我的話德频,我做不到這么偉大,我只想照顧好自己的家人就夠了廓奕。
????然后呢抱婉,小菜和大鳥說了這個事情,他們就開始談?wù)撛O(shè)計模式了桌粉,今天討論的是簡單工廠和工廠方法模式蒸绩。
????簡單工廠就是第一章講的那個,在工廠類中有switch來生成對應(yīng)的運算子類铃肯,而工廠方法模式呢患亿,是在抽象工廠下面又?jǐn)U展了對應(yīng)的加減乘除四個工廠,有什么區(qū)別呢?
????在簡單工廠中步藕,如果要新增運算惦界,那么就要修改工廠類,增加switch的分支咙冗,這就違背了開-閉原則沾歪,而工廠方法中,新增運算是新增對應(yīng)的運算工廠類雾消,這樣不違背開閉原則灾搏。
????簡單工廠模式最大的優(yōu)點是工廠類中包含了必要的邏輯判斷,根據(jù)客戶端的選擇條件動態(tài)的實例化相關(guān)的類立润,對于客戶端來說狂窑,去除了與具體產(chǎn)品相關(guān)的依賴。比如計算器例子中桑腮,客戶端不用管該用哪個類的實例泉哈,只需要把運算符傳給工廠就行。但是不可避免的違背了開閉原則破讨,因為新增運算符勢必需要修改工廠類丛晦。

????下面來重點理解一下工廠方法模式:定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪個子類添忘,把一個類的實例化延遲到子類中采呐。
????工廠方法模式實現(xiàn)時,客戶端需要決定實例化哪一個工廠來實現(xiàn)運算類搁骑,選擇判斷的問題還是存在的,也就是說又固,工廠方法模式把簡單工廠的內(nèi)部判斷邏輯移到了客戶端中仲器,你想要增加功能,本來是改工廠類仰冠,現(xiàn)在是修改客戶端乏冀。

回到這一章的故事上來,用代碼來表示幫助老人這個故事:

/***
 * 雷鋒抽象類
 */
public abstract class LeiFeng {

    //    掃地
    abstract void sweep();

    //    洗衣服
    abstract void wash();

    //    買米
    abstract void buyRice();

}

現(xiàn)在三個學(xué)生去做好事洋只,學(xué)生類Student繼承LeiFent,在客戶端中這樣調(diào)用:

public static void main(String[] args) {

        LeiFeng student1 = new Student();
        LeiFeng student2 = new Student();
        LeiFeng student3 = new Student();

        student1.sweep();
        student2.wash();
        student3.buyRice();
    }

如果此時這三個不是學(xué)生,而是志愿者眯亦,那么就需要修改每個new Student()的地方误算,改成new Volunteer(),
如果用簡單工廠來描述担锤,就是:

switch 
  "學(xué)生" :
    new Student();
    break;
  "志愿者":
    new Volunteer();
    break;

每個實例化學(xué)生的地方蔚晨,都要寫Factory.createLeiFeng("學(xué)生"),如果需要改成志愿者肛循,那么每個地方都要修改;

而如果用工廠方法模式來描述這個例子铭腕,就是:
先創(chuàng)建StudentFactory和VolunteerFactory兩個工廠類银择,繼承LeiFengFactory,在客戶端中:

LeiFengFactory leiFengFactory = new StudentFactory();
LeiFeng leiFeng1 = leiFengFactory.createLeiFeng();
LeiFeng leiFeng2 = leiFengFactory.createLeiFeng();
LeiFeng leiFeng3 = leiFengFactory.createLeiFeng();

leiFeng1.buyRice();
leiFeng2.sweep();
leiFeng3.wash();

這樣累舷,如果要改成志愿者做好事浩考,那么只需要修改new StudentFactory()為new VolunteerFactory(),只需要改這一個地方就行被盈。

工廠方法模式比簡單工廠要高明一點析孽,它既封裝了創(chuàng)建對象的過程,又克服了開閉原則害捕,缺點是每加一個產(chǎn)品绿淋,就要對應(yīng)增加一個工廠類。 -- “反射尝盼,可以解決這個問題吞滞。”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盾沫,一起剝皮案震驚了整個濱河市裁赠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赴精,老刑警劉巖佩捞,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蕾哟,居然都是意外死亡一忱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門谭确,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帘营,“玉大人,你說我怎么就攤上這事逐哈》移” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵昂秃,是天一觀的道長禀梳。 經(jīng)常有香客問我,道長肠骆,這世上最難降的妖魔是什么算途? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮哗戈,結(jié)果婚禮上郊艘,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好纱注,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布畏浆。 她就那樣靜靜地躺著,像睡著了一般狞贱。 火紅的嫁衣襯著肌膚如雪刻获。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天瞎嬉,我揣著相機與錄音蝎毡,去河邊找鬼。 笑死氧枣,一個胖子當(dāng)著我的面吹牛沐兵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播便监,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扎谎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烧董?” 一聲冷哼從身側(cè)響起毁靶,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逊移,沒想到半個月后预吆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡胳泉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年拐叉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扇商。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡巷嚣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钳吟,到底是詐尸還是另有隱情,我是刑警寧澤窘拯,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布红且,位于F島的核電站,受9級特大地震影響涤姊,放射性物質(zhì)發(fā)生泄漏暇番。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一思喊、第九天 我趴在偏房一處隱蔽的房頂上張望壁酬。 院中可真熱鬧,春花似錦、人聲如沸舆乔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽希俩。三九已至吊宋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颜武,已是汗流浹背璃搜。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳞上,地道東北人这吻。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像篙议,于是被迫代替她去往敵國和親唾糯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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

  • 工廠模式是我們最常用的實例化對象模式了涡上,是用工廠方法代替new操作的一種模式趾断。通常我們所說的工廠模式是指工廠方法模...
    zfylin閱讀 1,314評論 0 7
  • 簡單工廠模式雖然簡單,但存在一個很嚴(yán)重的問題吩愧。當(dāng)系統(tǒng)中需要引入新產(chǎn)品時芋酌,由于靜態(tài)工廠方法通過所傳入?yún)?shù)的不同來創(chuàng)建...
    justCode_閱讀 1,187評論 1 9
  • 【學(xué)習(xí)難度:★★☆☆☆,使用頻率:★★★★★】直接出處:工廠方法模式梳理和學(xué)習(xí):https://github.co...
    BruceOuyang閱讀 615評論 0 2
  • 桃花夢 文/@峽谷聽風(fēng)揚 十里桃花春秋夢雁佳, 年年花開此山中脐帝。 桃花依舊笑春風(fēng), 看花人臉不盡同糖权。
    峽谷聽風(fēng)揚閱讀 352評論 2 18
  • 轉(zhuǎn)眼即逝堵腹,一切仿佛在昨天,如今你已出落成了大姑娘,我努力的適應(yīng)著你已經(jīng)長大了星澳!記憶中卻又努力的尋找你成長的足...
    辣媽萍萍閱讀 1,254評論 0 0