工廠模式

一.簡(jiǎn)單工廠模式

簡(jiǎn)單工廠模式是屬于創(chuàng)建型模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式框仔,但不屬于23種GOF設(shè)計(jì)模式之一庸娱。簡(jiǎn)單工廠模式是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類(lèi)的實(shí)例。簡(jiǎn)單工廠模式是工廠模式家族中最簡(jiǎn)單實(shí)用的模式俩垃,可以理解為是不同工廠模式的一個(gè)特殊實(shí)現(xiàn)

簡(jiǎn)單理解為如果需要為一個(gè)接口new 不同的對(duì)象沈撞,不需要直接new 對(duì)象慷荔,而是由工廠類(lèi)去創(chuàng)建對(duì)象,直接調(diào)用工廠類(lèi)的創(chuàng)建方法即可

好處就是調(diào)用方不關(guān)心創(chuàng)建對(duì)象的實(shí)現(xiàn)邏輯缠俺,直接調(diào)用工廠類(lèi).create 方法即可显晶,傳入不同的參數(shù),工廠類(lèi)里面通過(guò)這個(gè)參數(shù)壹士,用各種if else 來(lái)new 不同的對(duì)象吧碾,顯然這不符合開(kāi)閉原則,每次新加一個(gè)接口的實(shí)現(xiàn)類(lèi)墓卦,需要在工廠類(lèi)里面加一個(gè)if判斷 倦春,這個(gè)模式適用于 接口的實(shí)現(xiàn)類(lèi)基本固定,或者很少(3個(gè)左右)的情況

interface?ICar{

? ? void getCar();

}


class?SportCar? implement?ICar {

?void getCar(){//跑車(chē) }?

}

class?JeepCar?implement?ICar?{

?void getCar(){//吉普車(chē) }?

}

class Facatory{
? ? ? ? public ICar getCar(String name)

? ? ? ? {

? ? ? ? ? ? switch (name)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? case "Sport":

? ? ? ? ? ? ? ? ? ? return new SportCar();

? ? ? ? ? ? ? ? case CarType.JeepCarType:

? ? ? ? ? ? ? ? ? ? returnnew JeepCar();

? ? ? ? ? ? ? ? case "Jeep":

? ? ? ? ? ? ? ? ? ? return new JeepCar?();

? ? ? ? ? ? }

? ? ? ? }

}

main {
Facatory f = new?Facatory()落剪;

ICar? car1 = f.getCar("Sport");

ICar? car2 = f.getCar("Jeep");

}

二.工廠方法模式

此模式是在簡(jiǎn)單工廠模式基礎(chǔ)上擴(kuò)展睁本,簡(jiǎn)單工廠模式只有一個(gè)工廠實(shí)現(xiàn)類(lèi),有一個(gè)創(chuàng)建方法忠怖,內(nèi)部各種if判斷來(lái)new對(duì)象呢堰,二工廠方法則是:有一個(gè)工廠的抽象類(lèi),里面有一個(gè)接口的抽象方法凡泣,這個(gè)方法和接口的方法一摸一樣枉疼,都是抽象的,然后由這個(gè)工廠的不同工廠實(shí)現(xiàn)工廠類(lèi)去實(shí)現(xiàn)這個(gè)方法鞋拟,方法內(nèi)部就是一個(gè)個(gè)new 不同工廠業(yè)務(wù)對(duì)應(yīng)的對(duì)象骂维,調(diào)用的時(shí)候就直接new 不同的實(shí)現(xiàn)工廠類(lèi)即可

interface?ICar{

? ? void getCar();

}

class?SportCar?implement?ICar?{

?void getCar(){//跑車(chē) }?

}

class?JeepCar?implement?ICar?{

?void getCar(){//吉普車(chē) }?

}

interface?Facatory{//這里也可以寫(xiě)抽象類(lèi),然后寫(xiě)公共方法贺纲,調(diào)用抽象方法航闺,簡(jiǎn)單就用接口和接口方法理解

?ICar getCar();

}

class?SportCarFacatory?implement?Facatory?{

?ICar?getCar(){ return new? SportCar ();}?

}

class?JeepCarFacatory?implement?Facatory{

?ICar?getCar(){return new?JeepCar?() }?

}

main{

Facatory f1 =?new?SportCarFacatory?();

ICar? car1 = f1.getCar();

Facatory f2 =?new?JeepCarFacatory?();

ICar? car2 = f2.getCar();

}

優(yōu)點(diǎn)很明顯潦刃,擴(kuò)展很麻煩侮措,新加一種類(lèi)型的車(chē),就新加一個(gè)類(lèi)型的工廠類(lèi)乖杠,不像簡(jiǎn)單工廠那樣去工廠類(lèi)里面加if判斷分扎,缺點(diǎn)就是類(lèi)太多了,如果有很多類(lèi)型的車(chē)的話(huà)

三.抽象工廠

就是不僅僅生產(chǎn)車(chē)胧洒,還會(huì)生產(chǎn)電腦畏吓,這樣的業(yè)務(wù),就是有一個(gè)抽象工廠類(lèi)略荡,里面有不同的抽象方法,產(chǎn)生不同的實(shí)現(xiàn)工廠


interface?ICar{

? ? void getCar();

}

class?SportCar?implement?ICar?{

?void getCar(){//跑車(chē) }?

}

class?JeepCar?implement?ICar?{

?void getCar(){//吉普車(chē) }?

}

不僅僅只有車(chē)子的業(yè)務(wù)歉胶,還有電腦的業(yè)務(wù)

interface?IComputer{

? ? void getComputer();

}

class?NoteBookComputer implement?IComputer{

?void getComputer(){//筆記本 }?

}

class?PCComputer?implement?IComputer{

void?getComputer(){//臺(tái)式機(jī)}

}


abstract?Facatory{//抽象工廠

ICar?getCar();

IComputer?getComputer();

}


class Facatory1 implement?Facatory?{//工廠1生產(chǎn)跑車(chē)和筆記本

ICar?getCar(){ return new?SportCar ();}

IComputer?getComputer(){return new?NoteBookComputer (); }

}

class?Facatory1implement?Facatory{//工廠2生產(chǎn)吉普車(chē)和臺(tái)式機(jī)

ICar?getCar(){return new?JeepCar?()汛兜; }

IComputer?getComputer(){return new?PCComputer?();?}

}

main{

Facatory f1 = new?Facatory1 ();

f1.getCar();

f1.getComputer();

Facatory f2 = new?Facatory2 ();

f2.getCar();

f2.getComputer();

}

可以看到一個(gè)產(chǎn)品可以產(chǎn)生一組業(yè)務(wù),而每一組業(yè)務(wù)由不同的工廠產(chǎn)生通今,如果再加一個(gè)業(yè)務(wù)粥谬,如生產(chǎn)衣服,則需要改很多類(lèi)的代碼辫塌,不符合開(kāi)閉原則

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漏策,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子臼氨,更是在濱河造成了極大的恐慌掺喻,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件储矩,死亡現(xiàn)場(chǎng)離奇詭異感耙,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)持隧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)即硼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人屡拨,你說(shuō)我怎么就攤上這事只酥。” “怎么了呀狼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵裂允,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我哥艇,道長(zhǎng)叫胖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任她奥,我火速辦了婚禮瓮增,結(jié)果婚禮上怎棱,老公的妹妹穿的比我還像新娘。我一直安慰自己绷跑,他們只是感情好拳恋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著砸捏,像睡著了一般谬运。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垦藏,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天梆暖,我揣著相機(jī)與錄音,去河邊找鬼掂骏。 笑死轰驳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弟灼。 我是一名探鬼主播级解,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼田绑!你這毒婦竟也來(lái)了勤哗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掩驱,失蹤者是張志新(化名)和其女友劉穎芒划,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體欧穴,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腊状,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苔可。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缴挖。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖焚辅,靈堂內(nèi)的尸體忽然破棺而出映屋,到底是詐尸還是另有隱情,我是刑警寧澤同蜻,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布棚点,位于F島的核電站,受9級(jí)特大地震影響湾蔓,放射性物質(zhì)發(fā)生泄漏瘫析。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贬循。 院中可真熱鬧咸包,春花似錦、人聲如沸杖虾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奇适。三九已至坟比,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚷往,已是汗流浹背葛账。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皮仁,地道東北人籍琳。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像魂贬,于是被迫代替她去往敵國(guó)和親巩割。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裙顽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 創(chuàng)建型設(shè)計(jì)模式: 簡(jiǎn)單工廠模式付燥、工廠方法模式、抽象工廠模式愈犹、單例模式键科、原型模式和建造者模式。 統(tǒng)共六種漩怎。 本此分享...
    markfork閱讀 422評(píng)論 0 2
  • 工廠模式是我們最常用的實(shí)例化對(duì)象模式了勋颖,是用工廠方法代替new操作的一種模式。通常我們所說(shuō)的工廠模式是指工廠方法模...
    zfylin閱讀 1,313評(píng)論 0 7
  • 摘錄 設(shè)計(jì)模式一 工廠模式Factory 在面向?qū)ο缶幊讨? 最通常的方法是一個(gè)new操作符產(chǎn)生一個(gè)對(duì)象實(shí)例,ne...
    西江月閱讀 469評(píng)論 0 2
  • 1勋锤、現(xiàn)有一個(gè)水果蔬菜項(xiàng)目饭玲,需要根據(jù)傳參的不同生成不同的水果對(duì)象 2、以面向?qū)ο蟮脑瓌t設(shè)計(jì)這個(gè)項(xiàng)目 1)抽象出一...
    朕要回幼兒園閱讀 322評(píng)論 0 1
  • 簡(jiǎn)單工廠模式 工廠模式我的理解是:他就是為了創(chuàng)建對(duì)象的 創(chuàng)建對(duì)象的時(shí)候叁执,我們一般是alloc一個(gè)對(duì)象茄厘,如果需要?jiǎng)?chuàng)建...
    GitHubPorter閱讀 8,067評(píng)論 6 16