設(shè)計(jì)模式-工廠模式

上一篇已經(jīng)描述了簡(jiǎn)單工廠的實(shí)現(xiàn),并對(duì)特點(diǎn)和問(wèn)題做了對(duì)比唾那,如果感興趣可以去看幢踏。

場(chǎng)景背景

經(jīng)過(guò)大家的努力搀矫,啃得雞的草莓冰淇淋和香草冰淇淋銷量不錯(cuò)。

準(zhǔn)備繼續(xù)販?zhǔn)坌碌谋苛墚a(chǎn)品纵菌,發(fā)現(xiàn)每次生產(chǎn)新產(chǎn)品時(shí),都要對(duì)之前的工廠(簡(jiǎn)單工廠)進(jìn)行改造休涤。

啃得雞害怕會(huì)影響產(chǎn)品品質(zhì)咱圆,希望設(shè)計(jì)一個(gè)發(fā)布新產(chǎn)品不會(huì)影響原產(chǎn)品生產(chǎn)的工廠。

代碼如何實(shí)現(xiàn)功氨?

場(chǎng)景分析

讓我們?cè)傧胍幌氡苛芄S的流水線吧闷堡;如何再不影響一個(gè)流水線的情況下,再多出一種產(chǎn)品嗯疑故?

造一條新的流水線去生產(chǎn)新產(chǎn)品杠览!

程序就是好,造流水線沒(méi)那么花錢纵势。

流水線.png

實(shí)現(xiàn)

實(shí)現(xiàn)類圖:


工廠模式.png

這時(shí)我們發(fā)現(xiàn)如果需要我們有了一個(gè)新冰淇淋(產(chǎn)品)踱阿,那么我們就安排一個(gè)新的生產(chǎn)線(工廠)。再也不會(huì)影響原了的冰淇淋生產(chǎn)情況了钦铁。

代碼

冰淇淋:

// 冰淇淋接口
class IceCreamInterface
{
public:
    virtual ~IceCreamInterface() {}
    virtual void taste() = 0;
};

// 草莓冰淇淋
class StrawberryIceCreamImpl : public IceCreamInterface
{
public:
    virtual void taste() override
    {
        qDebug() << QStringLiteral("草莓冰淇淋的味道软舌!");
    }
};

// 香草冰淇淋
class VanillaIceCreamImpl : public IceCreamInterface
{
public:
    virtual void taste() override
    {
        qDebug() << QStringLiteral("香草冰淇淋的味道!");
    }
};

冰淇淋工廠:

// 冰淇淋工廠接口
class IceCreamFactoryInterface
{
public:
    virtual ~IceCreamFactoryInterface() {}
    virtual IceCreamInterface * createIceCream() = 0;
};
// 草莓冰淇淋工廠
class StrawberryIceCreamFactory : public IceCreamFactoryInterface
{
public:
    StrawberryIceCreamFactory() {}
    IceCreamInterface * createIceCream()
    {
        return new StrawberryIceCreamImpl();
    }
};
// 香草冰淇淋工廠
class VanillaIceCreamFactory : public IceCreamFactoryInterface
{
public:
    VanillaIceCreamFactory() {}
    IceCreamInterface * createIceCream()
    {
        return new VanillaIceCreamImpl();
    }
};

客戶端:

int main(int argc, char *argv[])
{
    IceCreamFactoryInterface* pStrawberryIceCreamFactory =
            new StrawberryIceCreamFactory();

    IceCreamFactoryInterface* pVanillaIceCreamFactory =
            new VanillaIceCreamFactory();

    IceCreamInterface* pStrawberryIceCream = pStrawberryIceCreamFactory->createIceCream();
    IceCreamInterface* pVanillaIceCream = pVanillaIceCreamFactory->createIceCream();

    pStrawberryIceCream->taste();
    pVanillaIceCream->taste();

    delete pStrawberryIceCreamFactory;
    delete pVanillaIceCreamFactory;
    delete pStrawberryIceCream;
    delete pVanillaIceCream;
}

代碼位置:

https://github.com/su-dd/Demo_DesignPattern/tree/main/FactoryMethod

使用感悟

這里我們解決了簡(jiǎn)單工廠存在的問(wèn)題牛曹,符合開閉原則的增加產(chǎn)品生產(chǎn)佛点;

但是我們同時(shí)引入了新的問(wèn)題,客戶端使用起來(lái)很麻煩黎比,對(duì)應(yīng)到現(xiàn)實(shí)就是本來(lái)一個(gè)客戶去一個(gè)工廠能滿足所有的需求超营,現(xiàn)在客戶想要同時(shí)買到兩種冰淇淋就需要跑兩個(gè)場(chǎng);

所有現(xiàn)在我們需一個(gè)超市阅虫,或者小賣部演闭?

工廠模式的特點(diǎn):

1、工廠類可以不實(shí)例化颓帝,使用靜態(tài)工廠類米碰。

2窝革、隨著產(chǎn)品的增加,工廠也不斷的增加吕座,可能造成對(duì)象的爆發(fā)虐译。

3、客戶需要關(guān)注每個(gè)工廠的不同才能獲得想要的產(chǎn)品吴趴,可能增加維護(hù)成本菱蔬。

思考:

什么是產(chǎn)品,什么是工廠史侣?

由于產(chǎn)品和工廠兩個(gè)名稱的迷惑性拴泌,我們可能會(huì)下意識(shí)的把他們對(duì)應(yīng)到某個(gè)實(shí)體的映射。(這當(dāng)然是初學(xué)時(shí)最快的理解方式)

但產(chǎn)品和工廠的概念中惊橱,產(chǎn)品指的是類蚪腐;類可以是事物,關(guān)系等的抽象税朴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末回季,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子正林,更是在濱河造成了極大的恐慌泡一,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件觅廓,死亡現(xiàn)場(chǎng)離奇詭異鼻忠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)杈绸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門帖蔓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瞳脓,你說(shuō)我怎么就攤上這事塑娇。” “怎么了劫侧?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵埋酬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我烧栋,道長(zhǎng)写妥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任劲弦,我火速辦了婚禮耳标,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邑跪。我一直安慰自己次坡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布画畅。 她就那樣靜靜地躺著砸琅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轴踱。 梳的紋絲不亂的頭發(fā)上症脂,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音淫僻,去河邊找鬼诱篷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雳灵,可吹牛的內(nèi)容都是我干的棕所。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼悯辙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼琳省!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起躲撰,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤针贬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拢蛋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桦他,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年谆棱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞬铸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡础锐,死狀恐怖嗓节,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情皆警,我是刑警寧澤拦宣,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站信姓,受9級(jí)特大地震影響鸵隧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜意推,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一豆瘫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菊值,春花似錦外驱、人聲如沸育灸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)磅崭。三九已至,卻和暖如春瓦哎,著一層夾襖步出監(jiān)牢的瞬間砸喻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工蒋譬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留割岛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓犯助,卻偏偏與公主長(zhǎng)得像癣漆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子也切,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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

  • 是否真正理解設(shè)計(jì)模式會(huì)影響到我們?cè)O(shè)計(jì)項(xiàng)目架構(gòu)扑媚,項(xiàng)目的代碼結(jié)構(gòu),這些都對(duì)項(xiàng)目以后的維護(hù)起到至關(guān)重要的作用雷恃。 簡(jiǎn)單工廠...
    黑白咖閱讀 294評(píng)論 0 1
  • 工廠模式簡(jiǎn)單工廠模式工廠方法模式抽象工廠模式 1.簡(jiǎn)單工廠模式 1.基本介紹1)簡(jiǎn)單工廠模式也叫靜態(tài)工廠模式疆股,是屬...
    132xin閱讀 194評(píng)論 0 2
  • 工廠模式 一個(gè)類可能在很多地方都需要實(shí)例化。比如數(shù)據(jù)庫(kù)類倒槐,每次使用都需要實(shí)例化旬痹。如果類名改了,則相對(duì)調(diào)用位置的代碼...
    潛淵_bc21閱讀 424評(píng)論 0 0
  • 前言 最近在復(fù)習(xí)java設(shè)計(jì)模式中的工廠模式讨越。本來(lái)有一點(diǎn)小小的理解两残。感覺(jué)都寫的不錯(cuò),就是有點(diǎn)太零散了把跨,最后還是決定...
    斌林誠(chéng)上閱讀 18,737評(píng)論 3 25
  • 工廠模式可以簡(jiǎn)單概括為同類型不同型號(hào)的產(chǎn)品有各自對(duì)應(yīng)的工廠進(jìn)行生產(chǎn)人弓。比如iPhone手機(jī)旗下有iPhoneX及iP...
    二豬哥閱讀 579評(píng)論 0 11