每天一个设计模式: 抽象工厂模式(AbstractFactory)

#ifndef ABSTRACTFACTORY_H
#define ABSTRACTFACTORY_H

class ProductA;
class ProductB;

class AbstractFactory
{
public:
    AbstractFactory();
    ~AbstractFactory();

    ProductA* CreateProductA();
    ProductB* CreateProductB();
};

#endif // ABSTRACTFACTORY_H

#include "abstractfactory.h"

#include "product.h"

AbstractFactory::AbstractFactory()
{
}

AbstractFactory::~AbstractFactory()
{

}

ProductA* AbstractFactory::CreateProductA()
{
    return new ProductA();
}

ProductB* AbstractFactory::CreateProductB()
{
    return new ProductB();
}
#ifndef PRODUCT_H
#define PRODUCT_H

class ProductA
{
public:
    ProductA();
    ~ProductA();
};

class ProductB
{
public:
    ProductB();
    ~ProductB();
};

#endif // PRODUCT_H

#include "product.h"

#include <iostream>

ProductA::ProductA()
{
    std::cout<<"ProductA" << std::endl;
}

ProductA::~ProductA()
{}

ProductB::ProductB()
{
    std::cout<<"ProductB" <<std::endl;
}

ProductB::~ProductB()
{

}

#include <iostream>

using namespace std;

#include "abstractfactory.h"

int main()
{
    AbstractFactory* factory = new AbstractFactory();

    ProductA* pa = factory->CreateProductA();

    ProductB* pb = factory->CreateProductB();

    delete pa;

    delete pb;

    return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽象工厂模式是一种创建型设计模式,它提供了一个接口来创建一系列相关或相互依赖的对象,而无需指定它们的具体类。下面是一个简单的 C++ 实现: 首先,定义一个抽象基类 `AbstractProduct`,用于表示所有产品的共同接口: ```cpp class AbstractProduct { public: virtual void operation() = 0; }; ``` 然后,定义两个具体产品类 `ConcreteProduct1` 和 `ConcreteProduct2`,它们实现了 `AbstractProduct` 接口: ```cpp class ConcreteProduct1 : public AbstractProduct { public: void operation() override { std::cout << "ConcreteProduct1::operation()" << std::endl; } }; class ConcreteProduct2 : public AbstractProduct { public: void operation() override { std::cout << "ConcreteProduct2::operation()" << std::endl; } }; ``` 接下来,定义一个抽象工厂类 `AbstractFactory`,它提供了创建产品的接口,但是没有具体实现: ```cpp class AbstractFactory { public: virtual AbstractProduct* createProduct1() = 0; virtual AbstractProduct* createProduct2() = 0; }; ``` 最后,定义两个具体工厂类 `ConcreteFactory1` 和 `ConcreteFactory2`,它们实现了 `AbstractFactory` 接口,并分别创建了 `ConcreteProduct1` 和 `ConcreteProduct2`: ```cpp class ConcreteFactory1 : public AbstractFactory { public: AbstractProduct* createProduct1() override { return new ConcreteProduct1(); } AbstractProduct* createProduct2() override { return new ConcreteProduct2(); } }; class ConcreteFactory2 : public AbstractFactory { public: AbstractProduct* createProduct1() override { return new ConcreteProduct2(); } AbstractProduct* createProduct2() override { return new ConcreteProduct1(); } }; ``` 现在,我们可以使用抽象工厂来创建具体产品,而不需要知道它们的具体类: ```cpp int main() { AbstractFactory* factory = new ConcreteFactory1(); AbstractProduct* product1 = factory->createProduct1(); // 创建 ConcreteProduct1 AbstractProduct* product2 = factory->createProduct2(); // 创建 ConcreteProduct2 product1->operation(); // 调用 ConcreteProduct1 的操作 product2->operation(); // 调用 ConcreteProduct2 的操作 delete product1; delete product2; delete factory; factory = new ConcreteFactory2(); product1 = factory->createProduct1(); // 创建 ConcreteProduct2 product2 = factory->createProduct2(); // 创建 ConcreteProduct1 product1->operation(); // 调用 ConcreteProduct2 的操作 product2->operation(); // 调用 ConcreteProduct1 的操作 delete product1; delete product2; delete factory; return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值