您的位置:首页 > 其它

05.抽象工厂模式【ABSTRACT FACTORY PATTERN】

2014-08-18 23:27 225 查看
推荐文章:http://www.jellythink.com/archives/62

类图:



类图解读:

Factory:定义一个工厂

Factory1,Factory2:工厂中的不同的两条生产线。

ProductA,ProductB:需要生产的产品类型定义(接口)

ProductA1,ProductA1;ProductB1,ProductB2:需生产的具体产品。

在一个工厂中,创建多条生产流水线,来生产自定义的产品,只是相对工厂方法模式中,每一条可生产加了一条生产之路可生产出新产品(可扩展性)。

实现代码:

#include <iostream>

usingnamespace std;

// Product A

class ProductA

{

public:

    virtualvoidShow()=0;

};

 

class ProductA1:publicProductA

{

public:

    voidShow()

    {

        cout<<"I'm ProductA1"<<endl;

    }

};

 

class ProductA2:publicProductA

{

public:

    voidShow()

    {

        cout<<"I'm ProductA2"<<endl;

    }

};

 

// Product B

class ProductB

{

public:

    virtualvoidShow()=0;

};

 

class ProductB1:publicProductB

{

public:

    voidShow()

    {

        cout<<"I'm ProductB1"<<endl;

    }

};

 

class ProductB2:publicProductB

{

public:

    voidShow()

    {

        cout<<"I'm ProductB2"<<endl;

    }

};

 

// Factory

class Factory

{

public:

    virtualProductA*CreateProductA()=0;

    virtualProductB*CreateProductB()=0;

};

 

class Factory1:publicFactory

{

public:

    ProductA*CreateProductA()

    {

        returnnewProductA1();

    }

 

    ProductB*CreateProductB()

    {

        returnnewProductB1();

    }

};

 

class Factory2:publicFactory

{

    ProductA*CreateProductA()

    {

        returnnewProductA2();

    }

 

    ProductB*CreateProductB()

    {

        returnnewProductB2();

    }

};

 

int main(intargc,char*argv[])

{

    Factory* factoryObj1=newFactory1();

    ProductA* productObjA1=factoryObj1->CreateProductA();

    ProductB* productObjB1=factoryObj1->CreateProductB();

 

    productObjA1->Show();

    productObjB1->Show();

 

    Factory* factoryObj2 = newFactory2();

    ProductA* productObjA2 = factoryObj2->CreateProductA();

    ProductB* productObjB2 = factoryObj2->CreateProductB();

 

    productObjA2->Show();

    productObjB2->Show();

 

    if(factoryObj1!=NULL)

    {

        delete factoryObj1;

        factoryObj1=NULL;

    }

 

    if(productObjA1!=NULL)

    {

        delete productObjA1;

        productObjA1=NULL;

    }

 

    if(productObjB1!=NULL)

    {

        delete productObjB1;

        productObjB1=NULL;

    }

 

    if(factoryObj2!=NULL)

    {

        delete factoryObj2;

        factoryObj2=NULL;

    }

 

    if(productObjA2!=NULL)

    {

        delete productObjA2;

        productObjA2=NULL;

    }

 

    if(productObjB2!=NULL)

    {

        delete productObjB2;

        productObjB2=NULL;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: