C++設(shè)計模式(二) GeekBand

“對象創(chuàng)建”模式
通過“對象創(chuàng)建”模式繞開new讲婚,來避免對象創(chuàng)建(new)過程中所導(dǎo)致的緊耦合(依賴具體類)亭病,從而支持對象創(chuàng)建的穩(wěn)定年局。它是接口抽象之后的第一步工作悬垃。其中包括工廠方法(Factory Method),抽象工廠(Abstract Factory)娱仔,原型模式(Prototype)鱼鸠,建造者模式(Builder)煎源。

工廠模式(Factory)

工廠方法(Factory Method)

模式定義
定義一個用于創(chuàng)建對象的接口墓塌,讓子類決定實例化哪一個類。Factory Method使得一個類的實例化延遲到子類奥额。

工廠方法(Factory Method)

工廠提供FactoryMethod()的虛接口苫幢,在ConcreteCreator中實現(xiàn),這里假定有個ConcreteCreator垫挨,只生產(chǎn)ConcreteProduct產(chǎn)品韩肝。
以ConcreteCreator為例,代碼框架如下:

class ConcreteCreator: public Factory
{
    virtual Product* CreateProduct()
    {
        return new ConcreteProduct();
    }
};

在客戶端用 Factory *f ; f->CreateProduct();就可以得到ConcreteProduct的對象了九榔。

  • Factory Method模式用于隔離類對象的使用者和具體類型之間的耦合關(guān)系哀峻。面對一個經(jīng)常變化的具體類型涡相,緊耦合關(guān)系(new)會導(dǎo)致軟件的脆弱。
  • Factory Method模式通過面向?qū)ο蟮氖址ㄊs埃瑢⑺獎?chuàng)建的具體對象工作延遲到子類催蝗,從而實現(xiàn)一種擴(kuò)展(而非更改)的策略,較好地解決了這種緊耦合關(guān)系育特。
  • Factory Method模式解決“單個對象”的需求變化丙号。缺點在于要求創(chuàng)建方法/參數(shù)相同。
抽象工廠(Abstract Factory)

模式定義
提供一個接口缰冤,讓該接口負(fù)責(zé)創(chuàng)建一系列“相關(guān)或者相互依賴的對象”犬缨,無需指定它們具體的類。

抽象工廠(Abstract Factory)

抽象工廠又是工廠方法的升級版棉浸,但本質(zhì)是相同的怀薛。由圖可以看到不同的地方在于多了一個抽象產(chǎn)品的類。
ConcreateFactory1只生產(chǎn)ProductA1和ProductB1迷郑,即下標(biāo)帶“1”的產(chǎn)品枝恋。在ConcreteFactory1中的兩個方法應(yīng)該如下:

AbstractProductA* CreateProductA()
{
      return new ProductA1();
}

AbstractProductB* CreateProductB()
{
      return new ProductB1();
}
  • 如果沒有應(yīng)對“多系列對象構(gòu)建”的需求變化,則沒有必要使用Abstract Factory模式三热,這時候使用簡單的工廠完全可以鼓择。
  • “系列對象”指的是在某一特定系列下的對象之間有相互依賴或作用的關(guān)系。不同系類的對象之間不能相互依賴就漾。
  • Abstract Factory模式主要在與應(yīng)對“新系列”的需求變動呐能。其缺點在于難以應(yīng)對“新對象”的需求變動。
總結(jié)

工廠方法
一個抽象產(chǎn)品類抑堡,可以派生出多個具體產(chǎn)品類摆出。
一個抽象工廠類,可以派生出多個具體工廠類首妖。
每個具體工廠類只能創(chuàng)建一個具體產(chǎn)品類的實例偎漫。
抽象工廠
多個抽象產(chǎn)品類,每個抽象產(chǎn)品類可以派生出多個具體產(chǎn)品類有缆。
一個抽象工廠類象踊,可以派生出多個具體工廠類。
每個具體工廠類可以創(chuàng)建多個具體產(chǎn)品類的實例棚壁。
區(qū)別
工廠方法只有一個抽象產(chǎn)品類杯矩,而抽象工廠有多個。
工廠方法的具體工廠類只能創(chuàng)建一個具體產(chǎn)品類的實例袖外,而抽象工廠可以創(chuàng)建多個史隆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市曼验,隨后出現(xiàn)的幾起案子泌射,更是在濱河造成了極大的恐慌粘姜,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熔酷,死亡現(xiàn)場離奇詭異孤紧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纯陨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門坛芽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翼抠,你說我怎么就攤上這事咙轩。” “怎么了阴颖?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵活喊,是天一觀的道長。 經(jīng)常有香客問我量愧,道長钾菊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任偎肃,我火速辦了婚禮煞烫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘累颂。我一直安慰自己滞详,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布紊馏。 她就那樣靜靜地躺著料饥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朱监。 梳的紋絲不亂的頭發(fā)上岸啡,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音赫编,去河邊找鬼巡蘸。 笑死,一個胖子當(dāng)著我的面吹牛擂送,可吹牛的內(nèi)容都是我干的悦荒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼团甲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了黍聂?” 一聲冷哼從身側(cè)響起躺苦,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤身腻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匹厘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘀趟,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年愈诚,在試婚紗的時候發(fā)現(xiàn)自己被綠了她按。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡炕柔,死狀恐怖酌泰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匕累,我是刑警寧澤陵刹,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站欢嘿,受9級特大地震影響衰琐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炼蹦,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一羡宙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掐隐,春花似錦狗热、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慷妙,卻和暖如春僻焚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膝擂。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工虑啤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人架馋。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓狞山,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叉寂。 傳聞我的和親對象是個殘疾皇子萍启,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

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

  • 設(shè)計模式匯總 一、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 3,947評論 1 15
  • 一勘纯、設(shè)計模式的分類 總體來說設(shè)計模式分為三大類: 創(chuàng)建型模式局服,共五種:工廠方法模式、抽象工廠模式驳遵、單例模式淫奔、建造者...
    RamboLI閱讀 749評論 0 1
  • 一個UML類圖 類之間的關(guān)系 類的繼承結(jié)構(gòu)表現(xiàn)在UML中為:泛化(generalize)與實現(xiàn)(realize) ...
    僚機(jī)KK閱讀 647評論 0 0
  • 簡單工廠模式雖然簡單,但存在一個很嚴(yán)重的問題堤结。當(dāng)系統(tǒng)中需要引入新產(chǎn)品時唆迁,由于靜態(tài)工廠方法通過所傳入?yún)?shù)的不同來創(chuàng)建...
    justCode_閱讀 1,187評論 1 9
  • 一、設(shè)計模式的分類 總體來說設(shè)計模式分為三大類: 創(chuàng)建型模式竞穷,共五種:工廠方法模式唐责、抽象工廠模式、單例模式来庭、建造者...
    lichengjin閱讀 894評論 0 8