[Android]三種工廠模式總結(jié)茶鹃。

Android中,工廠模式分為三種:簡(jiǎn)單工廠模式四苇、工廠方法模式、抽象工廠模式方咆。

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

定義:簡(jiǎn)單工廠模式又叫靜態(tài)方法模式(因?yàn)楣S類定義了一個(gè)靜態(tài)方法);簡(jiǎn)單工廠模式可以理解為負(fù)責(zé)生產(chǎn)對(duì)象的一個(gè)類瓣赂,稱為“工廠類”榆骚。

概括:Concrete Product 具有共同的父類Product。工廠類Factory只有一個(gè)煌集,沒有子父類妓肢,通過(guò)向Factory的static方法中傳入不同的參數(shù),得到返回的不同的Concrete Product苫纤。

總結(jié):一個(gè)抽象產(chǎn)品類碉钠,可以派生出多個(gè)具體產(chǎn)品類。一個(gè)具體工廠類卷拘,通過(guò)往此工廠的static方法中傳入不同參數(shù)喊废,產(chǎn)出不同的具體產(chǎn)品類實(shí)例。


簡(jiǎn)單工廠模式 UML類圖

優(yōu)點(diǎn):

1.將創(chuàng)建實(shí)例的工作與使用實(shí)例的工作分開恭金,使用者不必關(guān)心類對(duì)象如何創(chuàng)建操禀,實(shí)現(xiàn)了解耦;

2.把初始化實(shí)例時(shí)的工作放到工廠里進(jìn)行横腿,使代碼更容易維護(hù)颓屑。 更符合面向?qū)ο蟮脑瓌t & 面向接口編程,而不是面向?qū)崿F(xiàn)編程耿焊。

缺點(diǎn):

1.工廠類集中了所有實(shí)例(產(chǎn)品)的創(chuàng)建邏輯揪惦,一旦這個(gè)工廠不能正常工作,整個(gè)系統(tǒng)都會(huì)受到影響罗侯;

2.違背“開放 - 關(guān)閉原則”器腋,一旦添加新產(chǎn)品就不得不修改工廠類的邏輯,這樣就會(huì)造成工廠邏輯過(guò)于復(fù)雜。

3.簡(jiǎn)單工廠模式由于使用了靜態(tài)工廠方法纫塌,靜態(tài)方法不能被繼承和重寫诊县,會(huì)造成工廠角色無(wú)法形成基于繼承的等級(jí)結(jié)構(gòu)。



二 措左、工廠方法模式

定義:工廠方法模式依痊,又稱工廠模式、多態(tài)工廠模式和虛擬構(gòu)造器模式怎披,通過(guò)定義工廠父類負(fù)責(zé)定義創(chuàng)建對(duì)象的公共接口胸嘁,而子類則負(fù)責(zé)生成具體的對(duì)象。

概括:Concrete Product 具有共同的父類Product 凉逛,Concrete Factory也具有共同的父類Factory性宏。每個(gè)具體的子類Concrete Factory 產(chǎn)出一個(gè)對(duì)應(yīng)的Concrete Product。

總結(jié):

一個(gè)抽象產(chǎn)品類状飞,可以派生出多個(gè)具體產(chǎn)品類毫胜。一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類昔瞧。每個(gè)具體工廠類只能創(chuàng)建一個(gè)具體產(chǎn)品類的實(shí)例指蚁。


工廠方法模式UML類圖

優(yōu)點(diǎn):

1、更符合開-閉原則

新增一種產(chǎn)品時(shí)自晰,只需要增加相應(yīng)的具體產(chǎn)品類和相應(yīng)的工廠子類即可凝化,而簡(jiǎn)單工廠模式需要修改工廠類的判斷邏輯

2、符合單一職責(zé)原則

每個(gè)具體工廠類只負(fù)責(zé)創(chuàng)建對(duì)應(yīng)的產(chǎn)品酬荞,而簡(jiǎn)單工廠中的工廠類存在復(fù)雜的switch邏輯判斷

3搓劫、不使用靜態(tài)工廠方法,可以形成基于繼承的等級(jí)結(jié)構(gòu)混巧,而簡(jiǎn)單工廠模式的工廠類使用靜態(tài)工廠方法

總結(jié):工廠模式可以說(shuō)是簡(jiǎn)單工廠模式的進(jìn)一步抽象和拓展枪向,在保留了簡(jiǎn)單工廠的封裝優(yōu)點(diǎn)的同時(shí),讓擴(kuò)展變得簡(jiǎn)單咧党,讓繼承變得可行秘蛔,增加了多態(tài)性的體現(xiàn)。

缺點(diǎn):

1傍衡、添加新產(chǎn)品時(shí)深员,除了增加新產(chǎn)品類外,還要提供與之對(duì)應(yīng)的具體工廠類蛙埂,系統(tǒng)類的個(gè)數(shù)將成對(duì)增加倦畅,在一定程度上增加了系統(tǒng)的復(fù)雜度;同時(shí)绣的,有更多的類需要編譯和運(yùn)行叠赐,會(huì)給系統(tǒng)帶來(lái)一些額外的開銷欲账;

2、由于考慮到系統(tǒng)的可擴(kuò)展性芭概,需要引入抽象層赛不,在客戶端代碼中均使用抽象層進(jìn)行定義,增加了系統(tǒng)的抽象性和理解難度罢洲,且在實(shí)現(xiàn)時(shí)可能需要用到DOM俄删、反射等技術(shù),增加了系統(tǒng)的實(shí)現(xiàn)難度奏路。

3、雖然保證了工廠方法內(nèi)的對(duì)修改關(guān)閉臊诊,但對(duì)于使用工廠方法的類鸽粉,如果要更換另外一種產(chǎn)品,仍然需要修改實(shí)例化的具體工廠類抓艳;

4触机、一個(gè)具體工廠只能創(chuàng)建一種具體產(chǎn)品



三、抽象工廠模式

定義:抽象工廠模式玷或,即Abstract Factory Pattern儡首,提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)須指定它們具體的類偏友;具體的工廠負(fù)責(zé)實(shí)現(xiàn)具體的產(chǎn)品實(shí)例蔬胯。

概括:

抽象工廠模式引入抽象產(chǎn)品族Abstract Product 的概念,它是所有產(chǎn)品的父類位他,其下是Product抽象類氛濒,它是Abstract Product的子類,是具體產(chǎn)品類的父類鹅髓,可有多種不同類型舞竿,如ProductA 、Product B窿冯,再往下骗奖,是具體的產(chǎn)品類 Concrete ProductA 、Concrete ProductB醒串;

Concrete Factory 有共同的父類Abstract Factory执桌。每個(gè)具體的Concrete Factory都可以生產(chǎn)多種不同產(chǎn)品。如Factory 1 可以生產(chǎn)Concrete ProductA1厦凤、Concrete Product B1鼻吮,F(xiàn)actory 2可以生產(chǎn)Concrete A2、Concrete B2较鼓。

總結(jié):

多個(gè)抽象產(chǎn)品類椎木,每個(gè)抽象產(chǎn)品類可以派生出多個(gè)具體產(chǎn)品類违柏。? ? 一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類香椎。? ? 每個(gè)具體工廠類可以創(chuàng)建多個(gè)具體產(chǎn)品類的實(shí)例漱竖。

抽象工廠模式UML類圖

優(yōu)點(diǎn):

1、降低耦合

抽象工廠模式將具體產(chǎn)品的創(chuàng)建延遲到具體工廠的子類中畜伐,這樣將對(duì)象的創(chuàng)建封裝起來(lái)馍惹,可以減少客戶端與具體產(chǎn)品類之間的依賴,從而使系統(tǒng)耦合度低玛界,這樣更有利于后期的維護(hù)和擴(kuò)展万矾;

2、更符合開-閉原則

新增一種產(chǎn)品類時(shí)慎框,只需要增加相應(yīng)的具體產(chǎn)品類和相應(yīng)的工廠子類即可良狈,而簡(jiǎn)單工廠模式需要修改工廠類的判斷邏輯

3、符合單一職責(zé)原則

4笨枯、每個(gè)具體工廠類只負(fù)責(zé)創(chuàng)建對(duì)應(yīng)的產(chǎn)品薪丁,而簡(jiǎn)單工廠中的工廠類存在復(fù)雜的switch邏輯判斷

5、不使用靜態(tài)工廠方法馅精,可以形成基于繼承的等級(jí)結(jié)構(gòu)严嗜,而簡(jiǎn)單工廠模式的工廠類使用靜態(tài)工廠方法


缺點(diǎn):

抽象工廠模式很難支持新種類產(chǎn)品的變化。

這是因?yàn)槌橄蠊S接口中已經(jīng)確定了可以被創(chuàng)建的產(chǎn)品集合洲敢,如果需要添加新產(chǎn)品漫玄,此時(shí)就必須去修改抽象工廠的接口,這樣就涉及到抽象工廠類的以及所有子類的改變压彭,這樣也就違背了“開發(fā)——封閉”原則称近。



總結(jié):

簡(jiǎn)單工廠模式:一個(gè)抽象產(chǎn)品類,可以派生出多個(gè)具體產(chǎn)品類哮塞。一個(gè)具體工廠類刨秆,通過(guò)往此工廠的static方法中傳入不同參數(shù),產(chǎn)出不同的具體產(chǎn)品類實(shí)例忆畅。

工廠方法模式:一個(gè)抽象產(chǎn)品類衡未,可以派生出多個(gè)具體產(chǎn)品類。一個(gè)抽象工廠類家凯,可以派生出多個(gè)具體工廠類缓醋。每個(gè)具體工廠類只能創(chuàng)建一個(gè)具體產(chǎn)品類的實(shí)例。

抽象工廠模式: 多個(gè)抽象產(chǎn)品類绊诲,每個(gè)抽象產(chǎn)品類可以派生出多個(gè)具體產(chǎn)品類送粱。? ? 一個(gè)抽象工廠類,可以派生出多個(gè)具體工廠類掂之。? ? 每個(gè)具體工廠類可以創(chuàng)建多個(gè)具體產(chǎn)品類的實(shí)例抗俄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脆丁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子动雹,更是在濱河造成了極大的恐慌槽卫,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胰蝠,死亡現(xiàn)場(chǎng)離奇詭異歼培,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)茸塞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門躲庄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人钾虐,你說(shuō)我怎么就攤上這事读跷。” “怎么了禾唁?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)无切。 經(jīng)常有香客問(wèn)我荡短,道長(zhǎng),這世上最難降的妖魔是什么哆键? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任掘托,我火速辦了婚禮,結(jié)果婚禮上籍嘹,老公的妹妹穿的比我還像新娘闪盔。我一直安慰自己,他們只是感情好辱士,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布泪掀。 她就那樣靜靜地躺著,像睡著了一般颂碘。 火紅的嫁衣襯著肌膚如雪异赫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天头岔,我揣著相機(jī)與錄音塔拳,去河邊找鬼。 笑死峡竣,一個(gè)胖子當(dāng)著我的面吹牛靠抑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播适掰,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颂碧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荠列!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起稚伍,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弯予,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后个曙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锈嫩,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年垦搬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呼寸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猴贰,死狀恐怖对雪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情米绕,我是刑警寧澤瑟捣,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站栅干,受9級(jí)特大地震影響迈套,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碱鳞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一桑李、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窿给,春花似錦贵白、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至角撞,卻和暖如春圈浇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背靴寂。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工磷蜀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人百炬。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓褐隆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親剖踊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庶弃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 一衫贬、工廠模式介紹 工廠模式專門負(fù)責(zé)將大量有共同接口的類實(shí)例化。工廠模式可以動(dòng)態(tài)決定將哪一個(gè)類實(shí)例化歇攻,不必事先知道每...
    端木軒閱讀 12,706評(píng)論 1 20
  • 說(shuō)明:在我理解中,這里所謂的抽象屡穗,其實(shí)就是制定某一個(gè)接口規(guī)范贴捡。具體體現(xiàn)在代碼里,就是設(shè)置一個(gè)基類村砂,基類遵守某一套接...
    醬油不愛醋閱讀 18,963評(píng)論 16 97
  • 一個(gè)UML類圖 類之間的關(guān)系 類的繼承結(jié)構(gòu)表現(xiàn)在UML中為:泛化(generalize)與實(shí)現(xiàn)(realize) ...
    僚機(jī)KK閱讀 645評(píng)論 0 0
  • 簡(jiǎn)單工廠模式雖然簡(jiǎn)單烂斋,但存在一個(gè)很嚴(yán)重的問(wèn)題。當(dāng)系統(tǒng)中需要引入新產(chǎn)品時(shí)础废,由于靜態(tài)工廠方法通過(guò)所傳入?yún)?shù)的不同來(lái)創(chuàng)建...
    justCode_閱讀 1,185評(píng)論 1 9
  • 在這個(gè)臨近畢業(yè)的季節(jié)里汛骂,我感受到從未有過(guò)的恐慌,當(dāng)我自負(fù)的讀書這么多年后评腺,我第一次在所有投遞都杳無(wú)音信后帘瞭,產(chǎn)...
    phyllia閱讀 161評(píng)論 0 0