设计模式-工厂模式(Factory)

Factory模式是一种创建型设计模式,用于封装对象的实例化过程。它提供了一个统一的接口来创建不同类型的对象,而无需暴露具体的实例化逻辑给客户端。

cpp 复制代码
#include <iostream>
#include <memory>

// AbstractProduct(抽象产品类):定义产品共同的接口
class Product {
public:
    virtual void operation() = 0;
};

// ConcreteProductA(具体产品类A)
class ConcreteProductA : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductA operation" << std::endl;
    }
};

// ConcreteProductB(具体产品类B)
class ConcreteProductB : public Product {
public:
    void operation() override {
        std::cout << "ConcreteProductB operation" << std::endl;
    }
};

// Factory(工厂类):负责创建具体产品对象
class Factory {
public:
    std::unique_ptr<Product> createProduct(int type) {
        switch (type) {
            case 1:
                return std::make_unique<ConcreteProductA>();
            case 2:
                return std::make_unique<ConcreteProductB>();
            default:
                return nullptr;
        }
    }
};

int main() {
    Factory factory;

    std::unique_ptr<Product> productA = factory.createProduct(1);
    if (productA)
        productA->operation();

    std::unique_ptr<Product> productB = factory.createProduct(2);
    if (productB)
        productB->operation();

    return 0;
}

抽象产品类Product,它定义了产品的共同接口。具体的产品类ConcreteProductA和ConcreteProductB继承自抽象产品类,实现了各自的具体操作。工厂类Factory负责创建具体产品对象。它根据传入的类型参数,在createProduct()方法中使用简单的条件语句创建相应的产品对象。此处使用std::unique_ptr来管理创建的产品对象,以确保资源的正确释放。

相关推荐
Zane19942 天前
一个 new 就能创建对象,为什么还要拆出单例、工厂、建造者、原型四种模式?
设计模式
怕浪猫3 天前
一行命令复刻爆款视频,我把 Hypit 从安装跑到了出片
人工智能·设计模式·程序员
Zane19943 天前
函数式编程里的函数,其实不是你天天写的那个函数——三大编程范式的边界在哪
设计模式
Zane19944 天前
策略模式现在该不该上?一次讲清楚过度设计和设计不足怎么找平衡
设计模式
她说..4 天前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
xiaofeiyang1504 天前
第六章 · 桥接 — 三支毛笔,画出九种颜色
设计模式
Shadow(⊙o⊙)5 天前
OTOL设计模式 One Thread One Loop
服务器·网络·设计模式
sarasuki5 天前
如何让LLM 能在半夜偷偷打开网易云呢?
人工智能·设计模式·agent
小王师傅666 天前
【设计模式】装饰模式(四):框架源码实战——从 Java I/O 到 Spring 到 MyBatis
java·设计模式
执明wa6 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio