设计模式之工厂模式(2)

来源:互联网 发布:windows音量快捷键 编辑:程序博客网 时间:2024/05/03 10:53

#ifndef ABSTRACT_FACTORY_H_#define ABSTRACT_FACTORY_H_//创建抽象产品class AbstractProductOne{public:    virtual voidCreateOne()=0;};class AbstractProductTwo{public:    virtual voidCreateTwo()=0;};//生产实际的产品class ProductOneA:public AbstractProductOne{public:    voidCreateOne();};class ProductOneB:public AbstractProductOne{public:    voidCreateOne();};class ProductTwoA:public AbstractProductTwo{public:    voidCreateTwo();};class ProductTwoB:public AbstractProductTwo{public:    voidCreateTwo();};   //创建抽象工厂class AbstractFactory{public:    virtualAbstractProductOne     *CreateProductOne() =0;    virtualAbstractProductTwo     *CreateProductTwo()       =0;}; //创建实际的工厂class FactoryA:public AbstractFactory{public:    AbstractProductOne  *CreateProductOne();    AbstractProductTwo  *CreateProductTwo(); };class FactoryB:public AbstractFactory{public:    AbstractProductOne  *CreateProductOne();    AbstractProductTwo  *CreateProductTwo();};#endif//实现文件#include "AbstractFactory.h"#include <iostream>using namespace std;void main(){    AbstractFactory*Factory1      =new FactoryA;    Factory1->CreateProductOne()->CreateOne();    Factory1->CreateProductTwo()->CreateTwo();    AbstractFactory*Factory2      =new FactoryB;    Factory2->CreateProductOne()->CreateOne();    Factory2->CreateProductTwo()->CreateTwo();}

从工厂方法模式到抽象工厂模式是这个模式的一个应用扩展,与之前工厂方法想比较而言,抽象工厂模式多了一个产品族的概念。工厂方法模式中,只有一个产品等级结构,而在抽象工厂模式中,就有多个产品等级结构。

产品族和等级结果是两种不同的对产品的划分方式,比如说一个生产鞋子的工厂,不同的鞋码是一个产品等级,但是男士鞋和女士鞋以及儿童鞋这属于不同的产品族划分。通过产品族和生产等级结构进行相互配合,从而生产出了你要求的某种款式和鞋码的鞋子。

下面是抽象工厂模式的通用类图。

与工厂方法模式相比,工厂方法模式中,每增加一类产品就需要增加一个实现的工厂。而抽象工厂的最大优点就是避免了频繁的增加实现工厂的缺陷。抽象工厂如果要增加一个新产品,只需要在基类中添加一个接口,即可以完成对新产品的生产。同时,生产出来的新产品可以沿用之前的产品族和生产等级结构。

因此,抽象工厂就是针对这种产品中有多种分类方法,而工厂方法又不能够很好进行解决而诞生的。工厂方法针对于某单一种类的生产等级结构是很方便的,但是对于这种存在多样化的生产方式,就会存在问题。

下面是一个实现的例子:


最后的实现效果如下:

抽象工厂对于繁多的产品种类情况下就能够很好的实现,其实在很多实际的生产中都是采用这种抽象工厂模式的。

原创粉丝点击