- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- C++中的工廠(chǎng)模式怎么實(shí)現
這篇文章主要講解了“C++中的工廠(chǎng)模式怎么實(shí)現”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“C++中的工廠(chǎng)模式怎么實(shí)現”吧!
工廠(chǎng)模式中使用了多態(tài)的原理,來(lái)將具體實(shí)現和接口進(jìn)行有效的解耦合,符合開(kāi)閉原則和依賴(lài)倒置原則
需要新加功能的時(shí)候不需要對原有代碼進(jìn)行修改。
抽象類(lèi)human和抽象類(lèi)factory就是調用接口,而實(shí)際的生產(chǎn)過(guò)程通過(guò)factory的子類(lèi)(如boyfactory)來(lái)new
一個(gè)具體的human(如:boy)子類(lèi)然后返回一個(gè)human父類(lèi)的指針完成,如下圖:
具體的代碼如下:
點(diǎn)擊(此處)折疊或打開(kāi)
#include<iostream>
using namespace std;
//工廠(chǎng)模式新增功能并不會(huì )修改原有代碼符合開(kāi)閉原則
//使用多態(tài)實(shí)現
//純虛擬接口
class human
{
public:
virtual void getman(void) = 0;
virtual ~human()
{
//cout<<"4:"<<endl;
}
};
class factory
{
public:
virtual human* greman(void) = 0;
virtual ~factory()
{
// cout<<"3:"<<endl;
}
};
/////boy
class boy:public human
{
public:
virtual void getman(void)
{
cout<<"I'M BOY!"<<endl;
}
virtual ~boy()
{
// cout<<"2:"<<endl;
}
};
class boyfactory:public factory
{
private:
boy* p;
public:
virtual human* greman(void) //負責生產(chǎn)boy言外之意就是調用一個(gè)new來(lái)new出內存空間
{
p = new boy;
return p;
}
virtual ~boyfactory()
{
// cout<<"1:"<<endl;
delete p;
}
};
//后來(lái)新建的woman工廠(chǎng)和woman定義
//////////////woman
class woman:public human
{
public:
virtual void getman(void)
{
cout<<"I'M woman!"<<endl;
}
virtual ~woman()
{
// cout<<"5:"<<endl;
}
};
class womanfactory:public factory
{
private:
woman* p;
public:
virtual human* greman(void) //負責生產(chǎn)woman言外之意就是調用一個(gè)new來(lái)new出內存空間
{
p = new woman;
return p;
}
virtual ~womanfactory()
{
//cout<<"6:"<<endl;
delete p;
}
};
///////////////////////
int main(void)
{
//生產(chǎn)boy
factory* fa1= new boyfactory;
human* hm1 = NULL;
hm1 = fa1->greman();
hm1->getman();
delete fa1;
//生產(chǎn)woman
factory* fa2= new womanfactory;
human* hm2 = NULL;
hm2 = fa2->greman();
hm2->getman();
delete fa2;
cout<<"hello!"<<endl;
}
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站