设计模式六:工厂模式(Factory Pattern)
概念
定义一个创建对象的接口,但让子类决定实例化哪个类。
实现示例
#include <iostream> #include <memory>// 产品基类 class Product { public:virtual void use() = 0;virtual ~Product() = default; };// 具体产品A class ConcreteProductA : public Product { public:void use() override {std::cout << "Using Product A" << std::endl;} };// 具体产品B class ConcreteProductB : public Product { public:void use() override {std::cout << "Using Product B" << std::endl;} };// 工厂基类 class Factory { public:virtual std::unique_ptr<Product> createProduct() = 0;virtual ~Factory() = default; };// 具体工厂A class ConcreteFactoryA : public Factory { public:std::unique_ptr<Product> createProduct() override {return std::make_unique<ConcreteProductA>();} };// 具体工厂B class ConcreteFactoryB : public Factory { public:std::unique_ptr<Product> createProduct() override {return std::make_unique<ConcreteProductB>();} };// 使用示例 int main() {std::unique_ptr<Factory> factoryA = std::make_unique<ConcreteFactoryA>();auto productA = factoryA->createProduct();productA->use(); // Using Product Astd::unique_ptr<Factory> factoryB = std::make_unique<ConcreteFactoryB>();auto productB = factoryB->createProduct();productB->use(); // Using Product Breturn 0; }
UML结构图
优缺点
优点:符合开闭原则,扩展性好
缺点:每增加一个产品就要增加一个工厂类
要点总结
1、FactoryMethod模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱。
2、FactoryMethod模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。
3、FactoryMethod模式解决“单个对象”的需求变化。缺点在于要求创建方法/参数相同。