设计模式-抽象工厂模式

抽象工厂模式的主要角色如下

抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。

具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。

抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。

具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它 同具体工厂之间

主要解决:主要解决接口选择的问题,多个工厂,多个产品,并且每个产品可以包含多个型号。虚基类的方式构建。每一个工厂类可以生产同一个产品的多个型号。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

如何解决:在一个产品族里面,定义多个产品。

关键代码:在一个工厂里聚合多个同类产品。

缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Create里加代码,又要在具体的里面加代码。是多对一的关系。

场景:比如车有2驱、4驱,2驱有卡罗拉、雷凌,4驱有汉兰达 、霸道。生产车的厂家有 一汽丰田,还有广汽丰田,他们分别生产2驱,4驱。代码如下:

//定义抽象类  
class car_two
{
public:
	virtual void show() = 0;
};
 
//定义具体类  
class kaluola :public car_two
{
public:
	void show();
};
 
class leilin :public car_two
{
public:
	void show();
};
 
//定义抽象类  
class car_four
{
public:
	virtual void show() = 0;
};
 
//定义具体类  
class hanlanda :public car_four 
{
public:
	void show();
};
 
class padao :public car_four
{
public:
	void show()
};
 
 
class Factory
{
public:
	virtual car_two *creat1() = 0;
	virtual car_four *creat2() = 0;
};
 
class guangqi:public Factory
{
public:
	car_two *creat1(){ return new leilin(); }
	car_four *creat2(){ return new hanlanda(); }
};
 
class yiqi:public Factory
{
public:
	car_two *creat1(){ return new kaluola(); }
	car_four *creat2(){ return new padao(); }
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
	Factory *factory = new guangqi ();
	factory->creat1()->show();
	factory->creat2()->show();
 
	factory = new yiqi();
	factory->creat1()->show();
	factory->creat2()->show();
 
	return 0;
}

抽象工厂模式的优点:

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

抽象工厂模式的缺点:

产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值