java設(shè)計模式-工廠模式

引言

工廠模式主要是為創(chuàng)建對象提供了接口勾栗。工廠模式按照《Java與模式》中的提法分為三類:

1. 簡單工廠模式(Simple Factory)

2. 工廠方法模式(Factory Method)

3. 抽象工廠模式(Abstract Factory)

這三種方法從上到下逐步具有抽象性渊抄,還有一種分類方法铸磅,將簡單工廠看做工廠方法的一種特例,分為一類哗魂。本片文章主要講解簡單工廠模式和工廠方法模式印荔,抽象工廠模式請參考下一章恶复。文章屬個人見解,如有不對還望大佬們指正殿雪。


一暇咆、簡單工廠模式

舉個小栗子:某客戶去某工廠買轎車,客戶說買寶馬丙曙,則希望得到一輛寶馬爸业,客戶說買奔馳,則希望得到一輛奔馳河泳,客戶說買……在這個過程中沃呢,客戶并不關(guān)心車如何制造的過程,這就可以用簡單工廠模式來實現(xiàn)拆挥。

在上面的栗子中薄霜,可以劃分三種角色:

1、工廠類角色:栗子中的工廠纸兔,也是本模式的核心模塊惰瓜,通過不同的輸入,生產(chǎn)制造出不同的車汉矿;

2崎坊、抽象產(chǎn)品角色:不同的車都可以抽象為車的概念,由接口或者抽象類來體現(xiàn)洲拇;

3奈揍、具體產(chǎn)品角色:即栗子中的寶馬車曲尸、奔馳車等具體產(chǎn)品,通過實現(xiàn)或繼承抽象產(chǎn)品來實現(xiàn)男翰;

用類圖來表示他們之間的關(guān)系:

簡單工廠模式類圖

圖中接口Car表示抽象產(chǎn)品角色另患,具有一般性;BwmCar類蛾绎、BenzCar類等為具體產(chǎn)品角色昆箕;CarFactory為工廠類角色,主要生產(chǎn)不同的汽車租冠;FactoryDemo可以理解為“客戶”鹏倘。

實現(xiàn)代碼如下

1编丘、先創(chuàng)建抽象產(chǎn)品類

抽象產(chǎn)品類

2旋圆、創(chuàng)建具體產(chǎn)品類

具體產(chǎn)品類
具體產(chǎn)品類
具體產(chǎn)品類

3、創(chuàng)建工廠類

工廠類

4笔呀、“客戶”買車

測試類

5话原、測試結(jié)果

測試結(jié)果

通過上面的小栗子夕吻,希望大家能對簡單工廠模式有一定的了解,簡單工廠模式一般適用于小項目或者具體產(chǎn)品很少擴(kuò)展的情況繁仁。

優(yōu)點:能很好的將對象的使用和創(chuàng)建分開涉馅,使用者并不關(guān)心對象的創(chuàng)建,達(dá)到了相對解耦的目的黄虱;

缺點:可擴(kuò)展性較差稚矿,假如增加新的產(chǎn)品類,則需要修改核心類代碼(即工廠類)捻浦,這樣違背了開閉原則(請參考上篇文章)晤揣。針對這點,工廠方法模式能很好的解決朱灿。


二昧识、工廠方法模式

還舉上面的例子,假設(shè)增加了新的品牌車(如大眾)盗扒,核心工廠需要改造跪楞,每次增加新品牌,都需要改造侣灶,會把核心工廠“累壞的”甸祭。換一個新的思路,將工廠抽象出來褥影,抽象方法為造車池户,至于具體造車由實現(xiàn)類或者繼承類去實現(xiàn),這樣的話,某客戶要買寶馬車校焦,就可以去寶馬車工廠買赊抖,某客戶要買奔馳車,則可以去奔馳車購買……這樣在新增車品牌時寨典,只需要擴(kuò)展工廠實現(xiàn)類即可熏迹,完美的解決了簡單工廠模式解決不了的開閉原則。

在工廠方法模式中有四種角色:

抽象工廠類角色:這是工廠方法模式的核心凝赛,是具體的工廠類角色必須實現(xiàn)或繼承的父類,將工廠抽象化坛缕;

具體工廠類角色:上面例子中的寶馬車工廠墓猎、奔馳車工廠,用創(chuàng)建對應(yīng)的具體產(chǎn)品赚楚;

抽象產(chǎn)品類角色:不同的車都可以抽象為車的概念毙沾,由接口或者抽象類來體現(xiàn);

具體產(chǎn)品角色:即栗子中的寶馬車宠页、奔馳車等具體產(chǎn)品左胞,通過實現(xiàn)或繼承抽象產(chǎn)品來實現(xiàn);

用類圖表示如下:

工廠方法模式類圖

由上圖可以看出举户,具體的車不再由核心工廠創(chuàng)建烤宙,而由不同的工廠創(chuàng)建。

實現(xiàn)代碼如下:

1俭嘁、先創(chuàng)建抽象產(chǎn)品類

抽象產(chǎn)品類

2躺枕、創(chuàng)建具體產(chǎn)品類

具體產(chǎn)品類
具體產(chǎn)品類
具體產(chǎn)品類

3、創(chuàng)建抽象工廠類

抽象工廠類

4供填、創(chuàng)建具體工廠類

具體工廠類
具體工廠類
具體工廠類

4拐云、“客戶”買車類

測試類

測試結(jié)果:

測試結(jié)果

使用開閉原則來分析下工廠方法模式。即當(dāng)有新產(chǎn)品時近她,只要繼承或?qū)崿F(xiàn)抽象產(chǎn)品類叉瘩;新建具體工廠繼承或?qū)崿F(xiàn)抽象工廠而不用修改任何一個類)工廠方法模式是完全符合開閉原則的!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粘捎,一起剝皮案震驚了整個濱河市薇缅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晌端,老刑警劉巖捅暴,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咧纠,居然都是意外死亡蓬痒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門漆羔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梧奢,“玉大人狱掂,你說我怎么就攤上這事∏坠欤” “怎么了趋惨?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惦蚊。 經(jīng)常有香客問我器虾,道長,這世上最難降的妖魔是什么蹦锋? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任兆沙,我火速辦了婚禮,結(jié)果婚禮上莉掂,老公的妹妹穿的比我還像新娘葛圃。我一直安慰自己,他們只是感情好憎妙,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布库正。 她就那樣靜靜地躺著,像睡著了一般厘唾。 火紅的嫁衣襯著肌膚如雪褥符。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天阅嘶,我揣著相機(jī)與錄音属瓣,去河邊找鬼。 笑死讯柔,一個胖子當(dāng)著我的面吹牛抡蛙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播魂迄,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粗截,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捣炬?” 一聲冷哼從身側(cè)響起熊昌,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎湿酸,沒想到半個月后婿屹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡推溃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年昂利,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜂奸,死狀恐怖犁苏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扩所,我是刑警寧澤围详,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站祖屏,受9級特大地震影響助赞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袁勺,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一嫉拐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魁兼,春花似錦、人聲如沸漠嵌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儒鹿。三九已至化撕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間约炎,已是汗流浹背植阴。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留圾浅,地道東北人掠手。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像狸捕,于是被迫代替她去往敵國和親喷鸽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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

  • 一灸拍、工廠模式簡介 意圖定義一個創(chuàng)建對象的接口做祝,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創(chuàng)建過程延遲到子類進(jìn)...
    怡紅快綠閱讀 603評論 0 0
  • 前言 最近在復(fù)習(xí)java設(shè)計模式中的工廠模式鸡岗。本來有一點小小的理解混槐。感覺都寫的不錯,就是有點太零散了轩性,最后還是決定...
    斌林誠上閱讀 18,748評論 3 25
  • 一声登、工廠模式主要是為創(chuàng)建對象提供過渡接口,以便將創(chuàng)建對象的具體過程屏蔽隔離起來,達(dá)到提高靈活性的目的捌刮。 工廠模式在...
    李序鍇閱讀 559評論 0 0
  • 一碰煌、簡單工廠 定義 簡單工廠其實并不屬于23種GOF設(shè)計模式之一,該模式是工廠方法模式的弱化(或者說是工廠方法模式...
    tianranll閱讀 198評論 0 0
  • 在java中绅作,通常使用new操作符創(chuàng)建對象的實例芦圾。但是在一些情況下,new操作符直接生成對象會帶來一些問題俄认,例如:...
    步積閱讀 863評論 2 3