05 抽象工厂模式

现在我们假设一种场景,有个水果商人,他想买一些水果,包括苹果、香蕉、西红柿,这时候使用工厂模式我们只要像苹果工厂、香蕉工厂、西红柿工厂提出订单即可,水果自然就生产出来了,但是如果这时候,商人为了扩大档次,想要进口美国的上面三种水果,这时候如果还是使用工厂模式,就不得不向美国的三家水果工厂提出订单,如果这时候又要日本的水果,又要创建三个日本的水果工厂。这样下去,工厂的种类将是以三倍速度增长,类的种类扩大很多。但是如果使用抽象工厂模式,我只需要向某个国家的工厂提交订单,让他们帮忙生产他们国家的三种水果即可,这样设计是不是简单了很多呢。

其实抽象工厂模式就是对工厂模式的一种改进,增加了工厂生产产品的种类,减少了冗余代码,提高了程序效率。适应于产品族生产的场景。

类图如下:

事例代码如下:

#include <iostream>
using namespace std;

/* 抽象产品类 */
class AbstractProduct {
public:
    virtual ~AbstractProduct() { }
    virtual void Operation() = 0;
};


/* 具体产品类 */
class ProductA :public AbstractProduct {
public:
    void Operation() {
        cout << "ProductA Operation" << endl;
    }
};


/* 具体产品类 */
class ProductB :public AbstractProduct {
public:
    void Operation() {
        cout << "ProductB Operation" << endl;
    }
};

/* 抽象工厂类 */
class AbstractFactory {
public:
    virtual ~AbstractFactory() { }
    virtual AbstractProduct* CreateProductA() = 0;
    virtual AbstractProduct* CreateProductB() = 0;
};

/* 具体工厂类A,可生产某种产品族 */
class ConcreteFactory :public AbstractFactory {
public:
    AbstractProduct* CreateProductA() {
        return new ProductA();
    }

    AbstractProduct* CreateProductB() {
        return new ProductB();
    }
};

int main() {
    AbstractFactory *factory = new ConcreteFactory();
    AbstractProduct* productA = factory->CreateProductA();
    AbstractProduct* productB = factory->CreateProductB();
    productA->Operation();
    productB->Operation();

    delete factory;
    delete productA;
    delete productB;

    return 0;
}

运行结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值