设计模式之Factory模式【C++】

//Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_

class ProductAbs
{
public:
    virtual ~ProductAbs();
    virtual void Operate()=0;

protected:
    ProductAbs();

private:
    
};

class ProductImpl1:public ProductAbs
{
public:
    ProductImpl1();
    ~ProductImpl1();
    
    void Operate();

protected:

private:

};

class ProductImpl2:public ProductAbs
{
public:
    ProductImpl2();
    ~ProductImpl2();
    
    void Operate();

protected:

private:

};

#endif
//Product.cpp
#include "Product.h"
#include<iostream>
using namespace std;

//class ProductAbs
ProductAbs::ProductAbs()
{

}

ProductAbs::~ProductAbs()
{

}

//class ProductImpl1
ProductImpl1::ProductImpl1()
{
    cout<<"Construct of ProductImpl1."<<endl;
}

ProductImpl1::~ProductImpl1()
{
    cout<<"Destruct of ProductImpl1."<<endl;
}

void ProductImpl1::Operate()
{
    cout<<"Operate of ProductImpl1."<<endl;
}

//class ProductImpl2
ProductImpl2::ProductImpl2()
{
    cout<<"Construct of ProductImpl2."<<endl;
}

ProductImpl2::~ProductImpl2()
{
    cout<<"Destruct of ProductImpl2."<<endl;
}

void ProductImpl2::Operate()
{
    cout<<"Operate of ProductImpl2."<<endl;
}
//Factory.h
#ifndef _FACTORY_H_
#define _FACTORY_H_

enum ID_PRODUCTIMPL //所有类的枚举,以便识别创建不同的类
{
ID_PRODUCTIMPL_1,
ID_PRODUCTIMPL_2
};

class ProductAbs;

class FactoryAbs
{
public:
    virtual ~FactoryAbs();
    virtual ProductAbs * CreateProduct(ID_PRODUCTIMPL id)=0;

protected:
    FactoryAbs();

private:

};

class FactoryImpl:public FactoryAbs
{
public:
    FactoryImpl();
    ~FactoryImpl();

    ProductAbs * CreateProduct(ID_PRODUCTIMPL id);

protected:
private:
};

#endif
//Factory.cpp
#include "Product.h"
#include "Factory.h"

//class FactoryAbs
FactoryAbs::FactoryAbs()
{

}

FactoryAbs::~FactoryAbs()
{

}

//class FactoryImpl
FactoryImpl::FactoryImpl()
{

}

FactoryImpl::~FactoryImpl()
{

}

ProductAbs * FactoryImpl::CreateProduct(ID_PRODUCTIMPL id)
{
    //根据id创建不同的对象
    switch(id)
    {
    case 0:
        return new ProductImpl1();
    case 1:
        return new ProductImpl2();
    default:
        return 0;
    }
}
//Test.cpp
#include "Product.h"
#include "Factory.h"
#include<iostream>
using namespace std;

void main()
{
    FactoryAbs * factory=new FactoryImpl();//创建工厂
    ProductAbs * product=NULL;
    
    if(product!=NULL)
    {
        delete product;
        product=NULL;
    }
    product=factory->CreateProduct(ID_PRODUCTIMPL_1);//创建ProductImpl1的对象
    product->Operate();//使用,与创建相分离

    if(product!=NULL)
    {
        delete product;
        product=NULL;
    }
    product=factory->CreateProduct(ID_PRODUCTIMPL_2);//创建ProductImpl2的对象
    product->Operate();//使用,与创建相分离

    if(product!=NULL)
    {
        delete product;
        product=NULL;
    }
    if(factory!=NULL)
    {
        delete factory;
        factory=NULL;
    }
}

posted on 2013-11-06 10:44  Anonymous_  阅读(214)  评论(0)    收藏  举报

导航