十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要講解了“C++中的工廠模式怎么實(shí)現(xiàn)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C++中的工廠模式怎么實(shí)現(xiàn)”吧!
工廠模式中使用了多態(tài)的原理,來將具體實(shí)現(xiàn)和接口進(jìn)行有效的解耦合,符合開閉原則和依賴倒置原則
需要新加功能的時(shí)候不需要對(duì)原有代碼進(jìn)行修改。
抽象類human和抽象類factory就是調(diào)用接口,而實(shí)際的生產(chǎn)過程通過factory的子類(如boyfactory)來new
一個(gè)具體的human(如:boy)子類然后返回一個(gè)human父類的指針完成,如下圖:
具體的代碼如下:
點(diǎn)擊(此處)折疊或打開
#include
using namespace std;
//工廠模式新增功能并不會(huì)修改原有代碼符合開閉原則
//使用多態(tài)實(shí)現(xiàn)
//純虛擬接口
class human
{
public:
virtual void getman(void) = 0;
virtual ~human()
{
//cout<<"4:"<
}
};
class factory
{
public:
virtual human* greman(void) = 0;
virtual ~factory()
{
// cout<<"3:"<
}
};
/////boy
class boy:public human
{
public:
virtual void getman(void)
{
cout<<"I'M BOY!"<
}
virtual ~boy()
{
// cout<<"2:"<
}
};
class boyfactory:public factory
{
private:
boy* p;
public:
virtual human* greman(void) //負(fù)責(zé)生產(chǎn)boy言外之意就是調(diào)用一個(gè)new來new出內(nèi)存空間
{
p = new boy;
return p;
}
virtual ~boyfactory()
{
// cout<<"1:"<
delete p;
}
};
//后來新建的woman工廠和woman定義
//////////////woman
class woman:public human
{
public:
virtual void getman(void)
{
cout<<"I'M woman!"<
}
virtual ~woman()
{
// cout<<"5:"<
}
};
class womanfactory:public factory
{
private:
woman* p;
public:
virtual human* greman(void) //負(fù)責(zé)生產(chǎn)woman言外之意就是調(diào)用一個(gè)new來new出內(nèi)存空間
{
p = new woman;
return p;
}
virtual ~womanfactory()
{
//cout<<"6:"<
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!"<
}
感謝各位的閱讀,以上就是“C++中的工廠模式怎么實(shí)現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)C++中的工廠模式怎么實(shí)現(xiàn)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!