設(shè)計模式詳解--創(chuàng)建型

創(chuàng)建型

  • 共5種
  • 工廠方法模式顽照、抽象工廠模式狼荞、建造者模式辽装、單例模式、原型模式

簡單工廠模式

  • 概念

    又稱為靜態(tài)工廠方法模式相味,在簡單工廠模式中拾积,可以根據(jù)參數(shù)的不同返回不同類的實例。簡單工廠專門定義一個類來負責創(chuàng)建其他類的實例丰涉,被創(chuàng)建的實例通常都具有共同的父類拓巧。簡單工廠不屬于GOF設(shè)計模式

  • 優(yōu)點

    客戶端可以免除直接創(chuàng)建產(chǎn)品對象的責任,而僅僅是“消費”產(chǎn)品

  • 缺點

    不符合開閉原則一死,系統(tǒng)擴展困難

  • 使用場景 ★★★★☆

    • 工廠類負責創(chuàng)建的對象比較少肛度。由于創(chuàng)建的對象較少,不會造成工廠方法中的業(yè)務(wù)邏輯太過復(fù)雜
    • 客戶端只知道傳入工廠類的參數(shù)投慈,對于如何創(chuàng)建對象不關(guān)心承耿,更不關(guān)心創(chuàng)建的細節(jié)


      簡單工廠.png

創(chuàng)建型

工廠方法模式

  • 概念

    定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類伪煤。工廠方法是一個類的實例化延遲到其子類

  • 優(yōu)點

    • 工廠方法用來創(chuàng)建客戶所需的產(chǎn)品加袋,向客戶隱藏了那個具體產(chǎn)品類將被實例化這一細節(jié)。用戶只需關(guān)心產(chǎn)品對應(yīng)的工廠抱既,無需關(guān)心創(chuàng)建細節(jié)
    • 它能夠使工廠可以自主確定創(chuàng)建何種產(chǎn)品對象职烧,而如何創(chuàng)建這個對象的細節(jié)則完全封裝在具體工廠內(nèi)部
    • 符合開閉原則,新增產(chǎn)品時防泵,無需修改抽象工廠和抽象產(chǎn)品提供的接口
  • 缺點

    • 新增產(chǎn)品時蚀之,需要編寫新的具體產(chǎn)品類,還需要提供與之對應(yīng)的具體工廠類捷泞。系統(tǒng)中類的個數(shù)將成對增加恬总,在一定程度上增加了系統(tǒng)的復(fù)雜度
    • 由于考慮到系統(tǒng)的可擴展性,需要引入抽象層肚邢,在客戶端代碼中均使用抽象層進行定義壹堰,增加了系統(tǒng)的抽象度和理解難度
  • 使用場景 ★★★★★

    • 一個類不知道他所需要的對象的類:客戶端需要知道創(chuàng)建具體產(chǎn)品的工廠類
    • 一個類通過其子類來指定創(chuàng)建哪個對象:在工廠方法模式中,對于抽象類只需要提供一個創(chuàng)建產(chǎn)品的接口骡湖,而由其子類來確定具體要創(chuàng)建的對象贱纠,利用面向?qū)ο蟮亩鄳B(tài)性和里氏替換原則,在程序運行時响蕴,子類對象將覆蓋父類對象谆焊,從而使系統(tǒng)更容易擴展
    • 將創(chuàng)建對象的任務(wù)委托給多個工廠子類中的某一個,客戶端在使用時可以無需關(guān)心是哪一個工廠子類創(chuàng)建產(chǎn)品子類浦夷,需要時再動態(tài)指定辖试,可將具體工廠類的類名存儲在配置文件或數(shù)據(jù)庫中


      工廠方法.png

抽象工廠模式

  • 概念

    提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口辜王,而無需指定他們具體的類

  • 優(yōu)點

    • 易于交換產(chǎn)品系列:由于具體工廠類在一個應(yīng)用中只需要被實例化一次,這使得改變一個應(yīng)用的具體工廠變得非常容易罐孝,它只需要改變具體工廠即可使用不同的產(chǎn)品配置
    • 它讓具體的創(chuàng)建實例過程與客戶端分離呐馆,客戶端是通過它們的抽象接口操縱實例,產(chǎn)品的具體類名也被具體工廠的實現(xiàn)分離莲兢,不會出現(xiàn)在客戶代碼中
  • 缺點

    • 在添加新的產(chǎn)品對象時汹来,難以擴展抽象工廠來生產(chǎn)新種類的產(chǎn)品,這是因為在抽象工廠角色中規(guī)定了所有可能被創(chuàng)建的產(chǎn)品集合改艇,要支持新種類的產(chǎn)品就意味著要對該接口進行擴展收班,而這將涉及對抽象工廠角色及其所有子類的修改,顯然會帶來較大的不變
  • 使用場景★★★★★

    • 系統(tǒng)中有多于一個的產(chǎn)品組谒兄,而每次只使用其中某一產(chǎn)品組摔桦。可以通過配置文件動態(tài)改變產(chǎn)品組承疲,如DB


      抽象工廠.png

建造者模式

  • 概念

    將一個復(fù)雜對象的構(gòu)建和它的表示分離邻耕,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。個人理解:類似于KFC套餐的概念纪隙,不同的套餐就是具體的建造實現(xiàn)類

  • 優(yōu)點

    • 客戶端不必知道產(chǎn)品內(nèi)部組成的細節(jié),將產(chǎn)品本身和產(chǎn)品的創(chuàng)建過程解耦扛或,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對象
    • 每一個具體建造者都相互獨立绵咱,與其他具體建造者無關(guān),可以方便的替代或新增
    • 可以更加精細的控制產(chǎn)品的創(chuàng)建過程
    • 新增建造者無需修改原有的代碼熙兔,符合開閉原則
  • 缺點

    • 建造者模式創(chuàng)建的產(chǎn)品一般具有較多的共同點悲伶,其組成部分相似。如果產(chǎn)品之間的差異很大住涉,則不適合使用建造者模式
    • 如果產(chǎn)品內(nèi)部變化復(fù)雜麸锉,可能會導(dǎo)致需要定義很多具體建造者類來實現(xiàn)這種變化
  • 使用場景★★☆☆☆

    • 需要生成的產(chǎn)品對象的屬性相互依賴,需要指定其生成順序
    • 對象的創(chuàng)建過程獨立于創(chuàng)建該對象的類
    • 隔離復(fù)雜對象的創(chuàng)建和使用


      建造者.png

單例模式

  • 概念

    保證一個類僅有一個實例舆声,并提供一個訪問它的全局訪問點

  • 優(yōu)點

    • 提供了對唯一實例的受控訪問花沉,它可以嚴格控制客戶怎樣以及何時訪問它
    • 節(jié)約系統(tǒng)資源
  • 缺點

    • 由于單例模式中沒有抽象層,因此單例類的擴展有很大困難
    • 單例類職責過重媳握,一定程度上違背了”單一職責原則“碱屁。因為單例類既充當了工廠角色,提供工廠方法蛾找,同時又充當了產(chǎn)品角色娩脾,包含了一些業(yè)務(wù)方法,將產(chǎn)品的創(chuàng)建和產(chǎn)品本身的功能融合到一起
    • 濫用會帶來負面問題打毛,如為了節(jié)省資源將數(shù)據(jù)庫連接池對象設(shè)計為單例類柿赊,可能會導(dǎo)致共享連接池對象的程序過多而出現(xiàn)連接池溢出
  • 使用場景★★★★☆

    • 系統(tǒng)只需要一個實例對象俩功。如系統(tǒng)要求提供一個唯一的序列號生成器
    • 客戶調(diào)用類的單個實例只允許使用一個公共訪問點,除了該訪問點碰声,不能通過其他路徑訪問


      單例.png

原型模式

  • 概念

    用原型實例指定創(chuàng)建對象的種類诡蜓,并且通過拷貝這些原型創(chuàng)建新的對象

  • 優(yōu)點

    • 簡化復(fù)雜對象的創(chuàng)建過程
    • 可以動態(tài)增加或減少產(chǎn)品類
    • 可以使用深克隆的方式保存對象的狀態(tài)
  • 缺點

    • 需要為每一個類配備一個克隆方法,這個克隆方法需要對類的功能通盤考慮
    • 實現(xiàn)深克隆時需要編寫較為復(fù)雜的代碼
  • 使用場景★★★☆☆

    • 創(chuàng)建對象成本較大的場景


      原型.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奥邮,一起剝皮案震驚了整個濱河市万牺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洽腺,老刑警劉巖脚粟,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蘸朋,居然都是意外死亡核无,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門藕坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來团南,“玉大人,你說我怎么就攤上這事炼彪⊥赂” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵辐马,是天一觀的道長拷橘。 經(jīng)常有香客問我,道長喜爷,這世上最難降的妖魔是什么冗疮? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮檩帐,結(jié)果婚禮上术幔,老公的妹妹穿的比我還像新娘。我一直安慰自己湃密,他們只是感情好诅挑,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泛源,像睡著了一般揍障。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俩由,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天毒嫡,我揣著相機與錄音,去河邊找鬼。 笑死兜畸,一個胖子當著我的面吹牛努释,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咬摇,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伐蒂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肛鹏?” 一聲冷哼從身側(cè)響起逸邦,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎在扰,沒想到半個月后缕减,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡芒珠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年桥狡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皱卓。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡裹芝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娜汁,到底是詐尸還是另有隱情嫂易,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布掐禁,位于F島的核電站怜械,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏穆桂。R本人自食惡果不足惜宫盔,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一融虽、第九天 我趴在偏房一處隱蔽的房頂上張望享完。 院中可真熱鬧,春花似錦有额、人聲如沸般又。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茴迁。三九已至,卻和暖如春萤衰,著一層夾襖步出監(jiān)牢的瞬間堕义,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工脆栋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倦卖,地道東北人洒擦。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像怕膛,于是被迫代替她去往敵國和親熟嫩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354