码迷,mamicode.com
首页 > 其他好文 > 详细

Abstract_Factory

时间:2014-12-08 19:09:50      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   io   ar   color   os   sp   on   

#include <iostream>

using namespace std;


#define DESTORY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; }



class ProductFamilyA
{
public:
    virtual ~ProductFamilyA() {}
    virtual void Action()=0;
    
protected:
    ProductFamilyA() {}
};

class ProductFamilyB
{
public:
    virtual ~ProductFamilyB() {}
    virtual void Action()=0;
    
protected:
    ProductFamilyB() {}
};


class Factory
{
public:
    virtual ~Factory() {}
    virtual ProductFamilyA* CreateProductA()=0;
    virtual ProductFamilyB* CreateProductB()=0;

protected:
    Factory() {}
};


class ProductA1 : public ProductFamilyA
{
public:
    ProductA1() {}
    void Action() { cout<<"ProductFamilyA->ProductA1::Action"<<endl; }
};

class ProductA2 : public ProductFamilyA
{
public:
    ProductA2() {}
    void Action() { cout<<"ProductFamilyA->ProductA2::Action"<<endl; }
};


class ProductB1 : public ProductFamilyB
{
public:
    ProductB1() {}
    void Action() { cout<<"ProductFamilyB->ProductB1::Action"<<endl; }
};

class ProductB2 : public ProductFamilyB
{
public:
    ProductB2() {}
    void Action() { cout<<"ProductFamilyB->ProductB2::Action"<<endl; }
};



class Factory1 : public Factory
{
public:
    ProductFamilyA* CreateProductA() { return new ProductA1; }
    ProductFamilyB* CreateProductB() { return new ProductB1; }
};


class Factory2 : public Factory
{
public:
    ProductFamilyA* CreateProductA() { return new ProductA2; }
    ProductFamilyB* CreateProductB() { return new ProductB2; }
};






int main(int argc, char *argv[])
{
    Factory* pFactory = NULL;
    ProductFamilyA* pProductFamilyA = NULL;
    ProductFamilyB* pProductFamilyB = NULL;


    pFactory = new Factory1;

    pProductFamilyA = pFactory->CreateProductA();
    pProductFamilyB = pFactory->CreateProductB();

    pProductFamilyA->Action();
    pProductFamilyB->Action();
    
    DESTORY_POINTER(pFactory);
    DESTORY_POINTER(pProductFamilyA);
    DESTORY_POINTER(pProductFamilyB);

    
    pFactory = new Factory2;
    pProductFamilyA = pFactory->CreateProductA();
    pProductFamilyB = pFactory->CreateProductB();

    pProductFamilyA->Action();
    pProductFamilyB->Action();
    
    DESTORY_POINTER(pFactory);
    DESTORY_POINTER(pProductFamilyA);
    DESTORY_POINTER(pProductFamilyB);
    
    return 0;
}

 

Abstract_Factory

标签:des   style   blog   io   ar   color   os   sp   on   

原文地址:http://www.cnblogs.com/stanley198610281217/p/4151521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!