Abstract Factory 抽象工厂模式

根据UML图简单代码进行演示过程如下:

Product.h

 

#ifndef _PRODUCT_H_ 
#define _PRODUCT_H_ 

class AbstractProductA 
{ 
public: 
	virtual ~AbstractProductA(); 
protected: 
	AbstractProductA(); 
private: 
}; 
class AbstractProductB 
{ 
public: 
	virtual ~AbstractProductB(); 
protected: 
	AbstractProductB(); 
private: 
}; 
class ProductA1:public AbstractProductA 
{ 
public: 
	ProductA1(); 
	~ProductA1(); 
protected: 
private:
}; 
class ProductA2:public AbstractProductA 
{ 
public: 
	ProductA2(); 
	~ProductA2(); 
protected: 
private:
}; 

class ProductB1:public AbstractProductB 
{ 
public: 
	ProductB1(); 
	~ProductB1(); 
protected: 
private: 
}; 
class ProductB2:public AbstractProductB 
{ 
public: 
	ProductB2(); 
	~ProductB2(); 
protected: 
private:
}; 
#endif 


 

AbstractFactory.h

#ifndef _ABSTRACTFACTORY_H_ 
#define _ABSTRACTFACTORY_H_ 
class AbstractProductA; 
class AbstractProductB; 
class AbstractFactory 
{ 
public: 
	virtual ~AbstractFactory(); 
	virtual  AbstractProductA* 
		CreateProductA()= 0;
	virtual  AbstractProductB* 
		CreateProductB()= 0;
protected: 
	AbstractFactory(); 
private: 
}; 
class ConcreteFactory1:public AbstractFactory
{ 
public: 
	ConcreteFactory1(); 
	~ConcreteFactory1(); 
	AbstractProductA* CreateProductA(); 
	AbstractProductB* CreateProductB(); 
protected: 
private: 
}; 
class ConcreteFactory2:public AbstractFactory
{ 
public: 
	ConcreteFactory2(); 
	~ConcreteFactory2(); 
	AbstractProductA* CreateProductA(); 
	AbstractProductB* CreateProductB(); 
protected: 
private: 
}; 
#endif 


两个cpp实现文件

#include"AbstractFactory.h" 
#include"Product.h" 
#include<iostream> 
using namespace std; 
AbstractFactory::AbstractFactory() 
{ 
} 
AbstractFactory::~AbstractFactory() 
{ 
} 
ConcreteFactory1::ConcreteFactory1() 
{ 
} 
ConcreteFactory1::~ConcreteFactory1() 
{ 
} 
AbstractProductA* 
	ConcreteFactory1::CreateProductA() 
{ 
	return new ProductA1(); 
} 
AbstractProductB* 
	ConcreteFactory1::CreateProductB() 
{ 
	return new ProductB1(); 
} 
ConcreteFactory2::ConcreteFactory2() 
{ 
} 
ConcreteFactory2::~ConcreteFactory2() 
{ 
} 
AbstractProductA* 
	ConcreteFactory2::CreateProductA() 
{ 
	return new ProductA2(); 
} 
AbstractProductB* 
	ConcreteFactory2::CreateProductB() 
{ 
	return new ProductB2(); 
}


 

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

AbstractProductA::AbstractProductA() 
{

} 
AbstractProductA::~AbstractProductA() 
{

} 
AbstractProductB::AbstractProductB() 
{ 

} 
AbstractProductB::~AbstractProductB() 
{ 

} 
ProductA1::ProductA1() 
{ 
	cout<<"ProductA1..."<<endl; 
} 
ProductA1::~ProductA1() 
{ 
} 
ProductA2::ProductA2() 
{ 
	cout<<"ProductA2..."<<endl; 
} 
ProductA2::~ProductA2() 
{ 
} 
ProductB1::ProductB1() 
{ 
	cout<<"ProductB1..."<<endl; 
} 
ProductB1::~ProductB1() 
{ 
} 
ProductB2::ProductB2() 
{ 
	cout<<"ProductB2..."<<endl; 
} 
ProductB2::~ProductB2() 
{ 

} 


主函数测试文件

 

#include"AbstractFactory.h" 
#include<iostream> 
using namespace std; 

int main(int argc,char*argv[])
{ 
	AbstractFactory* cf1  = new 
		ConcreteFactory1(); 
	cf1->CreateProductA(); 
	cf1->CreateProductB(); 
	AbstractFactory* cf2  = new 
		ConcreteFactory2(); 
	cf2->CreateProductA(); 
	cf2->CreateProductB(); 
	return 0;
}


AbstractFactory模式的实现代码很简单,在测试程序中可以看到,当我们要创建一组对
象(ProductA1,ProductA2)的时候我们只用维护一个创建对象(ConcreteFactory1),大大
简化了维护的成本和工作。

AbstractFactory模式和Factory模式的区别是初学(使用)设计模式时候的一个容易引
起困惑的地方。实际上,AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提
供创建接口,而Factory模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用Factory模式实现(ConcreteFactory1)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值