class IProductA
{
public:
IProductA(){}
virtual~IProductA(){}
public:
virtual void WhatA()=0;
};
class ProductA1:public IProductA
{
public:
ProductA1(){}
~ProductA1(){}
public:
void WhatA(){printf("this is a ProductA1!\n");}
};
class ProductA2 :public IProductA
{
public:
ProductA2(){}
~ProductA2(){}
public:
void WhatA(){printf("this is a ProductA2!\n");}
};
class IProductB
{
public:
IProductB(){}
virtual~IProductB(){}
public:
virtual void WhatB()=0;
};
class ProductB1:public IProductB
{
public:
ProductB1(){}
~ProductB1(){}
public:
virtual void WhatB(){printf("this is a ProductB1!\n");}
};
class ProductB2:public IProductB
{
public:
ProductB2(){}
~ProductB2(){}
public:
virtual void WhatB(){printf("this is a ProductB2!\n");};
};
class IFactory
{
public:
IFactory(){}
virtual~IFactory(){}
public:
virtual IProductA* CreateNewInstanceA()=0;
virtual IProductB* CreateNewInstanceB()=0;
virtual void Print()
{
IProductA *pa=CreateNewInstanceA();
IProductB *pb=CreateNewInstanceB();
pa->WhatA();
pb->WhatB();
delete pa;
delete pb;
}
};
class FactoryA1B1:public IFactory
{
public:
FactoryA1B1(){}
virtual~FactoryA1B1(){}
public:
IProductA* CreateNewInstanceA(){return new ProductA1;}
IProductB* CreateNewInstanceB(){return new ProductB1;}
};
class FactoryA1B2:public IFactory
{
public:
FactoryA1B2(){}
virtual~FactoryA1B2(){}
public:
IProductA* CreateNewInstanceA(){return new ProductA1;}
IProductB* CreateNewInstanceB(){return new ProductB2;}
};
class FactoryA2B1:public IFactory
{
public:
FactoryA2B1(){}
virtual~FactoryA2B1(){}
public:
IProductA* CreateNewInstanceA(){return new ProductA2;}
IProductB* CreateNewInstanceB(){return new ProductB1;}
};
class FactoryA2B2:public IFactory
{
public:
FactoryA2B2(){}
virtual~FactoryA2B2(){}
public:
IProductA* CreateNewInstanceA(){return new ProductA2;}
IProductB* CreateNewInstanceB(){return new ProductB2;}
};
int _tmain(int argc, _TCHAR* argv[])
{
FactoryA2B2 a2b2;
a2b2.Print();
FactoryA1B2 a1b2;
a1b2.Print();
FactoryA2B1 a1b1;
a1b1.Print();
FactoryA1B1 a2b1;
a2b1.Print();
getchar();
return 0;
}
转载于:https://my.oschina.net/u/221120/blog/883868