簡單工廠旦事、工廠方法、抽象工廠

轉載并補充自:https://www.cnblogs.com/qiaoconglovelife/p/5750290.html

簡單工廠

image

工廠類(SimpleFactory)擁有一個工廠方法(create)谷遂,接受了一個參數,通過不同的參數實例化不同的產品類卖鲤。
 
優(yōu)點:

  • 很明顯,簡單工廠的特點就是“簡單粗暴”白对,通過一個含參的工廠方法换怖,我們可以實例化任何產品類,上至飛機火箭蟀瞧,下至土豆面條条摸,無所不能铸屉。所以簡單工廠有一個別名:上帝類。

缺點:

  • 任何”東西“的子類都可以被生產顷啼,負擔太重。當所要生產產品種類非常多時钙蒙,工廠方法的代碼量可能會很龐大。
  • 在遵循開閉原則(對拓展開放躬厌,對修改關閉)的條件下竞帽,簡單工廠對于增加新的產品,無能為力屹篓。因為增加新產品只能通過修改工廠方法來實現疙渣。

適用場景:單個產品且種類較少且固定

抽象類別比較少的時候妄荔,比如http傳輸方式只有GET和POST

工廠方法正好可以解決簡單工廠的這兩個缺點恳邀。

工廠方法模式

image

工廠方法是針對每一種產品提供一個工廠類。通過不同的工廠實例來創(chuàng)建不同的產品實例刷钢。

優(yōu)點:

  • 工廠方法模式就很好的減輕了工廠類的負擔,把某一類/某一種東西交由一個工廠生產内地;(對應簡單工廠的缺點1)
  • 同時增加某一類”東西“并不需要修改工廠類,只需要添加生產這類”東西“的工廠即可阱缓,使得工廠類符合開放-封閉原則荆针。

缺點:

  • 相比簡單工廠,實現略復雜航背。
  • 對于某些可以形成產品族的情況處理比較復雜。

適用場景:單個產品且種類不確定容易變化

比如數據庫訪問類玖媚,不同數據庫使用模式可能不一致,但是基礎操作都是增刪改查勺像,產品很多:MySQL、Oracle吟宦、SQLite等等并且隨時可能添加一個新的數據庫督函,這個時候

抽象工廠

抽象工廠是應對產品族概念的激挪。

例如,汽車可以分為轎車垄分、SUV薄湿、MPV等,也分為奔馳吆倦、寶馬等。我們可以將奔馳的所有車看作是一個產品族蚕泽,而將寶馬的所有車看作是另一個產品族须妻。分別對應兩個工廠荒吏,一個是奔馳的工廠绰更,另一個是寶馬的工廠动知。與工廠方法不同盒粮,奔馳的工廠不只是生產具體的某一個產品丹皱,而是一族產品(奔馳轎車摊崭、奔馳SUV呢簸、奔馳MPV)「蛴“抽象工廠”的“抽象”指的是就是這個意思替裆。

上邊的工廠方法模式是一種極端情況的抽象工廠模式(即只生產一種產品的抽象工廠模式)辆童,而抽象工廠模式可以看成是工廠方法模式的一種推廣把鉴。

如下邊UML類圖所示為抽象工廠汉形。
  


image

只有對應產品族的情況下概疆,才需要使用抽象工廠模式逗威。

適用場景:具有產品族抽象規(guī)范(每個工廠都具有同樣類型的產品)且有多個類別的時候。

硬件設備的連接:dell家的鼠標凯旭、鍵盤、顯示器;Lenovo家的相同產品等等

區(qū)別

簡單工廠 : 用來生產同一等級結構中的任意產品。(不支持拓展增加產品)

工廠方法 :用來生產同一等級結構中的固定產品计螺。(支持拓展增加產品)

抽象工廠 :用來生產不同產品族的全部產品登馒。(不支持拓展增加產品陈轿;支持增加產品族)

注意事項

  • 工廠類常常采用單例模式(Singleton)。
  • 工廠類擁有基類(定義共同接口)蛾娶,基類可以為純虛類茫叭,也可以定義缺省方法半等。
  • 對于工廠方法和抽象工廠莽囤,基類中的生產產品的函數常常為虛函數,以實現動態(tài)綁定。
  • 調用工廠方法的函數通常采用工廠實現的指針和引用作為形參最筒,以便根據不同的工廠實參調用不同的工廠方法。
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末丹擎,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌田柔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骨望,死亡現場離奇詭異硬爆,居然都是意外死亡,警方通過查閱死者的電腦和手機擎鸠,發(fā)現死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門缀磕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劣光,你說我怎么就攤上這事袜蚕。” “怎么了绢涡?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵牲剃,是天一觀的道長。 經常有香客問我垂寥,道長颠黎,這世上最難降的妖魔是什么另锋? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮狭归,結果婚禮上夭坪,老公的妹妹穿的比我還像新娘。我一直安慰自己过椎,他們只是感情好室梅,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疚宇,像睡著了一般亡鼠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敷待,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天间涵,我揣著相機與錄音,去河邊找鬼榜揖。 笑死勾哩,一個胖子當著我的面吹牛,可吹牛的內容都是我干的举哟。 我是一名探鬼主播思劳,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼妨猩!你這毒婦竟也來了潜叛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤壶硅,失蹤者是張志新(化名)和其女友劉穎威兜,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體森瘪,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡牡属,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了扼睬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逮栅。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窗宇,靈堂內的尸體忽然破棺而出措伐,到底是詐尸還是另有隱情,我是刑警寧澤军俊,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布侥加,位于F島的核電站,受9級特大地震影響粪躬,放射性物質發(fā)生泄漏担败。R本人自食惡果不足惜昔穴,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望提前。 院中可真熱鬧吗货,春花似錦、人聲如沸狈网。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拓哺。三九已至勇垛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間士鸥,已是汗流浹背闲孤。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烤礁,地道東北人崭放。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像鸽凶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子建峭,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容