激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - C++設(shè)計(jì)模式之工廠方法模式的實(shí)現(xiàn)及優(yōu)缺點(diǎn)

C++設(shè)計(jì)模式之工廠方法模式的實(shí)現(xiàn)及優(yōu)缺點(diǎn)

2021-11-12 15:50WhiteShirtI C/C++

工廠方法模式是一個(gè)創(chuàng)建型設(shè)計(jì)模式,通過定義一個(gè)創(chuàng)建對象的接口,讓其子類決定實(shí)例化哪一個(gè)工廠類,這篇文章主要給大家介紹了關(guān)于C++設(shè)計(jì)模式之工廠方法模式的實(shí)現(xiàn)及優(yōu)缺點(diǎn),需要的朋友可以參考下

工廠方法模式是在簡單工廠模式的缺點(diǎn)上進(jìn)行優(yōu)化的,我們都知道,在簡單工廠模式中,要去增加或者減少一個(gè)產(chǎn)品的類型,都需要修改工廠中的if-else判斷。這樣子顯然不符合我們代碼開發(fā)中的開閉原則,拓展起來也是非常麻煩的

工廠方法模式 = 簡單工廠模式 + “開閉原則”

定義思想:工廠父類負(fù)責(zé)定義創(chuàng)建產(chǎn)品對象的公共接口,而工廠子類則負(fù)責(zé)生成具體的產(chǎn)品對象,這樣做的目的就是將產(chǎn)品類的實(shí)例化操作延遲到工廠子類中完成,即通過工廠子類來確定究竟應(yīng)該實(shí)例化哪一個(gè)具體產(chǎn)品類

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

  • 不需要記住具體的類名,甚至連具體參數(shù)都不需要記住
  • 實(shí)現(xiàn)了對象創(chuàng)建和使用的分離
  • 系統(tǒng)的可擴(kuò)展性變得更好,符合開閉原則

缺點(diǎn):

系統(tǒng)中的類是成對增加,增加了系統(tǒng)的復(fù)雜度和理解度

適用場景:

  • 客戶端不需要知道具體產(chǎn)品類的名字,只需要知道其所對應(yīng)的工廠即可
  • 不關(guān)心類的創(chuàng)建和實(shí)現(xiàn)的細(xì)節(jié)

代碼實(shí)現(xiàn):(手機(jī)產(chǎn)品)

C++設(shè)計(jì)模式之工廠方法模式的實(shí)現(xiàn)及優(yōu)缺點(diǎn)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//抽象手機(jī)
class AbstractPhone
{
public:
    virtual void ShowName() = 0;
};
 
//華為
class Huawei : public AbstractPhone
{
public:
    virtual void ShowName()
    {
        cout << "Huawei Phone" << endl;
    }
};
 
//小米
class Xiaomi : public AbstractPhone
{
public:
    virtual void ShowName()
    {
        cout << "Xiaomi Phone" << endl;
    }
};
 
//蘋果
class Apple : public AbstractPhone
{
public:
    virtual void ShowName()
    {
        cout << "Apple Phone" << endl;
    }
};
 
//抽象工廠
class AbstractPhoneFactory
{
public:
    virtual AbstractPhone* CreatePhone() = 0;
};
 
//華為工廠
class HuaweiFactory : public AbstractPhoneFactory
{
public:
    virtual AbstractPhone* CreatePhone()
    {
        return new Huawei();
    }
};
 
//小米工廠
class XiaomiFactory : public AbstractPhoneFactory
{
public:
    virtual AbstractPhone* CreatePhone()
    {
        return new Xiaomi();
    }
};
 
//蘋果工廠
class AppleFactory : public AbstractPhoneFactory
{
public:
    virtual AbstractPhone* CreatePhone()
    {
        return new Apple();
    }
};

測試:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void test()
{
    //創(chuàng)建一個(gè)工廠
    AbstractPhoneFactory* factory = nullptr;
    //創(chuàng)建一個(gè)手機(jī)
    AbstractPhone* phone = nullptr;
 
    //指定工廠是華為工廠
    factory = new HuaweiFactory;
    //通過華為工廠創(chuàng)建一個(gè)手機(jī)
    phone = factory->CreatePhone();
    phone->ShowName();
 
    delete phone;
    delete factory;
 
    factory = new XiaomiFactory;
    phone = factory->CreatePhone();
    phone->ShowName();
 
    delete phone;
    delete factory;
 
    factory = new AppleFactory;
    phone = factory->CreatePhone();
    phone->ShowName();
 
    delete phone;
    delete factory;
}

運(yùn)行結(jié)果:

C++設(shè)計(jì)模式之工廠方法模式的實(shí)現(xiàn)及優(yōu)缺點(diǎn)

總結(jié)

到此這篇關(guān)于C++設(shè)計(jì)模式之工廠方法模式的文章就介紹到這了,更多相關(guān)C++工廠方法模式內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_44443986/article/details/117519327

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人在线一区 | 精品一区免费 | 欧美城网站地址 | wwwxxx国产| 国产亚洲精品久久久久5区 综合激情网 | 亚洲一区播放 | 中国的免费的视频 | 一区二区三区小视频 | 视频一区国产 | h网站在线观看 | av手机在线免费播放 | 成人免费久久 | 欧美a在线观看 | 婷婷一区二区三区四区 | 成人福利电影在线观看 | 亚洲精品午夜国产va久久成人 | 毛片免费一区二区三区 | 午夜国产在线观看 | 国产精品久久久久久婷婷天堂 | 一级视频片 | 午夜免费网 | 欧美城网站地址 | 羞羞的视频在线观看 | 精品一区二区三区电影 | 国产精品久久久久久久久久东京 | va免费视频 | 亚州综合网 | 免费国产视频大全入口 | 狠狠干天天 | 黄色成人短视频 | 国产免费观看电影网站 | 欧美一级毛片美99毛片 | 国产无遮挡一区二区三区毛片日本 | 欧美日韩在线看片 | 久久探花 | 国产精品视频一区二区三区四 | 久久精品片 | 国产91久久精品一区二区 | 国产乱淫a∨片免费视频 | 久草视频在线资源 | 欧美激情性色生活片在线观看 |