九九热这里直有精品,1区二区三区在线播放,玖玖爱在线观看资源,国产aⅴ综合网,午夜福利男女,日本亚洲欧美三级,日韩无码黄色导航,内射少妇13区,中文字幕高清网

您身邊的軟件定制專家--9年開發(fā)經(jīng)驗(yàn)為您護(hù)航

18678812288
0531-88887250

工廠方法模式 C++實(shí)現(xiàn)

文章作者:濟(jì)南軟件開發(fā) 時(shí)間:2016年12月20日

工廠方法模式

定義:定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到其子類。

適用性:

1、 當(dāng)一個(gè)類不知道它所必須創(chuàng)建的對(duì)象的類的時(shí)候

2、 當(dāng)一個(gè)類希望由它的子類來指定它所創(chuàng)建的對(duì)象的時(shí)候

3、 當(dāng)類將創(chuàng)建對(duì)象的職責(zé)委托給多個(gè)幫助子類中的一個(gè),并且你希望將哪一個(gè)幫助子類是代理者這一信息局部化的時(shí)候

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

1、 良好的封裝性

2、 良好的擴(kuò)展性

3、 屏蔽了產(chǎn)品類,用戶不需要知道產(chǎn)品類的實(shí)例化過程。

4、 實(shí)現(xiàn)解耦,符合迪米特法則

 

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

class Product

{

public:

virtual void fun() = 0;

protected:

private:

};

 

class ConcreteProductA:public Product

{

public:

voidfun()

{

cout<<"ConcreteProductA"<<endl;< p="" style="margin: 0px; padding: 0px;">

}

protected:

private:

};

 

class ConcreteProductB:public Product

{

public:

voidfun()

{

cout<<"ConcreteProductB"<<endl;< p="" style="margin: 0px; padding: 0px;">

}

protected:

private:

};

 

class Creator

{

public:

virtualProduct *CreateProductMethod(int type) = 0;

protected:

private:

};

 

class ConcreteCreator:public Creator

{

public:

Product *CreateProductMethod(int type ) ;

protected:

private:

};

 

Product*ConcreteCreator::CreateProductMethod(int type)

{

switch(type)

{

case 0:

returnnew ConcreteProductA;

case 1:

returnnew ConcreteProductB;

default:

returnNULL;

}

}

 

如果不想創(chuàng)建Creator的子類,那么可以用模板類。

class Creator

{

public:

virtualProduct *CreateProductMethod() = 0;

protected:

private:

};

 

template

class TemplateCreator:public Creator

{

public:

Product *CreateProductMethod();

};

 

template

Product*TemplateCreator::CreateProductMethod()

{

return new T;

}

 

 

TemplateCreator ACreator;

TemplateCreatorBCreator;

Product *pa = ACreator.CreateProductMethod();

Product *pb =BCreator.CreateProductMethod();

pa->fun();

pb->fun();

 

擴(kuò)展:

1、簡(jiǎn)單工廠方法;有時(shí)候我們并不需要把工廠類實(shí)例化。那么可以把Creator去掉,不要繼承,直接使用靜態(tài)方法。

class ConcreteCreator

{

public:

staticProduct *CreateProductMethod(int type ) ;

protected:

private:

};

 

Product*ConcreteCreator::CreateProductMethod(int type)

{

switch(type)

{

case 0:

returnnew ConcreteProductA;

case 1:

returnnew ConcreteProductB;

default:

returnNULL;

}

}

 

Product *pa =ConcreteCreator::CreateProductMethod(0);

Product *pb =ConcreteCreator::CreateProductMethod(1);

pa->fun();

pb->fun();


想要了解更多詳情歡迎來電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。

马鞍山市| 酒泉市| 界首市| 彩票| 房产| 永德县| 平陆县| 施甸县| 柘荣县| 大埔区| 巴东县| 乡城县| 环江| 墨玉县| 龙游县| 辰溪县| 罗江县| 红河县| 施秉县| 都匀市| 曲麻莱县| 金山区| 闵行区| 根河市| 桐城市| 本溪市| 腾冲县| 青浦区| 台北市| 宜都市| 荣成市| 文山县| 溧阳市| 临邑县| 治多县| 前郭尔| 张家口市| 泽州县| 尚义县| 丘北县| 云霄县|