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

#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();
}

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

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

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

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

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

下面是一个实现的例子:


最后的实现效果如下:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值