/****************************
* 文件名: 简单工厂模式
* 创建人: 陈泽丹
* 创建时间:20100907
* 版本: 1.0
****************************/
#pragma once
#include "Product.h"
class EasyFactory
{
public:
EasyFactory(void){}
virtual ~EasyFactory(void){}
Product* getProductA()
{
Product* pProduct = new ConcreteProductA();
pProduct->initDialog(0);
return pProduct;
}
Product* getProductB()
{
Product* pProduct = new ConcreteProductB();
pProduct->initDialog(1);
return pProduct;
}
};
////////////////////////////
/****************************
* 文件名: 抽象工厂模式
* 创建人: 陈泽丹
* 创建时间:20100907
* 版本: 1.0
****************************/
#pragma once
class AbstractFactory
{
public:
AbstractFactory(void){}
virtual ~AbstractFactory(void){}
virtual Product* getProduct() = 0;
};
class FactoryA:public AbstractFactory
{
Product* getProduct()
{
Product* pProduct = new ConcreteProductA();
pProduct->initDialog(2);
return pProduct;
}
};
class FactoryB:public AbstractFactory
{
Product* getProduct()
{
Product* pProduct = new ConcreteProductB();
pProduct->initDialog(3);
return pProduct;
}
};
///////////////////////////////////
#pragma once
#include <iostream>
using namespace std;
class Product
{
public:
Product(void):m_iID(0){}
virtual ~Product(void){}
void initDialog(int i_iID){ m_iID = i_iID;}
virtual void show() = 0;
protected:
int m_iID;
};
class ConcreteProductA:public Product
{
public:
void show(){ cout<<"Game A: "<<m_iID<<endl; }
};
class ConcreteProductB:public Product
{
public:
void show(){ cout<<"Game B: "<<m_iID<<endl; }
};
///////////////////////////////////////////////////
#include <iostream>
#include "Product.h"
#include "EasyFactory.h"
#include "AbstractFactory.h"
using namespace std;
void EasyFactoryModel_Client()
{
Product* pProduct = NULL;
EasyFactory* pEasyFactory = NULL;
pEasyFactory = new EasyFactory();
if( NULL != pProduct)
delete pProduct;
pProduct = NULL;
pProduct = pEasyFactory->getProductA();
pProduct->show();
if( NULL != pProduct)
delete pProduct;
pProduct = NULL;
pProduct = pEasyFactory->getProductB();
pProduct->show();
if( NULL != pEasyFactory)
delete pEasyFactory;
pEasyFactory = NULL;
if( NULL != pProduct)
delete pProduct;
pProduct = NULL;
}
void AbstractFactoryModel_Client()
{
Product* pProduct = NULL;
AbstractFactory* pAbstractFactory = NULL;
if( NULL != pProduct)
delete pProduct;
pProduct = NULL;
if( NULL != pAbstractFactory)
delete pAbstractFactory;
pAbstractFactory = NULL;
pAbstractFactory = new FactoryA();
pProduct = pAbstractFactory->getProduct();
pProduct->show();
if( NULL != pProduct)
delete pProduct;
pProduct = NULL;
if( NULL != pAbstractFactory)
delete pAbstractFactory;
pAbstractFactory = NULL;
pAbstractFactory = new FactoryB();
pProduct = pAbstractFactory->getProduct();
pProduct->show();
if( NULL != pAbstractFactory)
delete pAbstractFactory;
pAbstractFactory = NULL;
if( NULL != pProduct)
delete pProduct;
pProduct = NULL;
}
void main()
{
EasyFactoryModel_Client();
AbstractFactoryModel_Client();
system("pause");
}