抽象工厂模式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值