simple_factory

#include <stdlib.h>
#include <iostream>
using namespace std;



class Product
{
public:
    virtual ~Product() {}
    virtual int Interface()=0;
};


class ConcreteProductA : public Product
{
public:
    ConcreteProductA() {}
    virtual ~ConcreteProductA() {}

    int Interface()
    {
        cout<<"Make my ProductA good!"<<endl;
        return -1;
    }
};

class ConcreteProductB : public Product
{
public:
    ConcreteProductB() {}
    virtual ~ConcreteProductB() {}

    int Interface()
    {
        cout<<"Make my ProductB better!"<<endl;
        return 0;
    }    
};

class ConcreteProductC : public Product
{
public:
    ConcreteProductC() {}
    virtual ~ConcreteProductC() {}

    int Interface()
    {
        cout<<"Make my ProductC best!"<<endl;
        return 1;
    }    
};



#define PRODUCTA 1
#define PRODUCTB 2
#define PRODUCTC 3


class SimpleFactory
{
public:
    static Product* CreateProduct(int iType)
    {
        switch(iType)
        {
            case PRODUCTA: return new ConcreteProductA;
            case PRODUCTB: return new ConcreteProductB;
            case PRODUCTC: return new ConcreteProductC;
            default:
            {
                cerr<<"Sorry, I have not the product you need!"<<endl;
                return NULL;
            }
        }
    }
};


#define CUSTOMER main
#define DESTROY(ptr) if (ptr) { delete ptr; ptr = NULL; }

int CUSTOMER(int argc, char** argv)
{
    Product* pProduct = NULL;
    
    pProduct = SimpleFactory::CreateProduct(PRODUCTA);
    pProduct->Interface();
    DESTROY(pProduct);

    pProduct = SimpleFactory::CreateProduct(PRODUCTB);
    pProduct->Interface();
    DESTROY(pProduct);    
    
    pProduct = SimpleFactory::CreateProduct(PRODUCTC);
    pProduct->Interface();
    DESTROY(pProduct);


    return EXIT_SUCCESS;
}

 

posted @ 2014-12-06 06:49  stanley19861028  阅读(198)  评论(0编辑  收藏  举报