抽象工厂模式
工厂模式 //一个系列的不同产品
#include <iostream>
#include <string>
using namespace std;
class IBody //说话接口类
{
public:
virtual void speak() = 0;
};
class IFactory //人口工厂
{
public:
virtual IBody * createBody(int iType) = 0;
};
class Chinese: public IBody //中国人
{
public:
virtual void speak()
{
printf("speak in 中国话\n");
}
};
class English: public IBody //英国人
{
public:
virtual void speak()
{
printf("speak in 英语\n");
}
};
class Factory: public IFactory //工厂实现
{
public:
IBody * createBody(int iType)
{
IBody * pBody= NULL;
switch (iType)
{
case 0:
pBody = new Chinese();
break;
case 1:
pBody = new English();
break;
default:
break;
}
return pBody;
}
};
void main()
{
IFactory * pFac = new Factory();
IBody * pBody = pFac->createBody(0);
pBody->speak();
IBody * pEng = pFac->createBody(1);
pEng->speak();
}
//抽象工厂模式
class IBody //说话接口类
{
public:
virtual void speak() = 0;
};
class IAnimal //动物接口
{
public:
virtual void say() = 0;
};
class IFactory //人口工厂
{
public:
virtual IBody * createBody(int iType) = 0;
virtual IAnimal * createAnimal(int iType) = 0;
};
class Chinese: public IBody //中国人
{
public:
virtual void speak()
{
printf("speak in 中国话\n");
}
};
class English: public IBody //英国人
{
public:
virtual void speak()
{
printf("speak in 英语\n");
}
};
class Pig :public IAnimal
{
public:
void say()
{
printf("这是个猪\n");
}
};
class Factory: public IFactory //工厂实现
{
public:
IBody * createBody(int iType)
{
IBody * pBody= NULL;
switch (iType)
{
case 0:
pBody = new Chinese();
break;
case 1:
pBody = new English();
break;
default:
break;
}
return pBody;
}
IAnimal * createAnimal(int iType)
{
IAnimal * pAni = NULL;
pAni = new Pig();
return pAni;
}
};
void main()
{
IFactory * pFac = new Factory();
pFac->createBody(0)->speak();
pFac->createBody(1)->speak();
pFac->createAnimal(0)->say();
}