模式简介
工厂方法模式的核心是,有一个产品和一个工厂的虚基类,每一个实际的产品对应一个实际的工厂,用户根据需要选择合适的工厂创建自己需要的产品。
这个模式和简单工厂模式的区别在于创建的方法上。简单工厂模式是根据需要传入参数,由一个工厂统一创建不同的产品,加重了工厂的负担,而且工厂部分不符合开闭原则;工厂方法模式是每新增一个产品,就对应地增加一个工厂,用户需要根据工厂来获取产品。
这种方式符合开闭原则,但是随着产品类的增加,工厂类也会随着增加,代码复杂度也会增加
模式实现
- 抽象工厂:所有工厂的基类
- 抽象产品:所有产品的基类
- 具体工厂:继承抽象工厂,用于生产具体的产品
- 具体产品:继承抽象产品
UML类图
代码实例
#include <iostream>
#include <memory>
class AbstractProduct { // 抽象产品
public:
virtual void showProduct() = 0;
};
class AbstractFactory { // 抽象工厂
public:
virtual std::shared_ptr<AbstractProduct> createProduct() = 0;
};
class ProductA : public AbstractProduct {
public:
void showProduct() override {
std::cout << "Product A\n";
}
};
class FactoryA : public AbstractFactory { // 具体工厂生产具体产品
public:
std::shared_ptr<AbstractProduct> createProduct() override {
return std::make_shared<ProductA>();
}
};
int main() {
std::shared_ptr<AbstractProduct> pro;
FactoryA facA;
pro = facA.createProduct();
pro->showProduct();
return 0;
}