大话设计模式之简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,属于工厂模式的一种。在简单工厂模式中,有一个工厂类负责根据输入参数的不同来创建不同类的实例。

简单工厂模式包含以下几个要素:

  1. **工厂类(Factory Class)**:工厂类包含一个方法,根据传入的参数动态地创建并返回不同类的实例。

  2. **产品接口(Product Interface)**:产品接口是被创建的对象所共享的接口或抽象类。

  3. **具体产品类(Concrete Product Classes)**:具体产品类是实现产品接口的具体类,由工厂类根据条件创建。

简单工厂模式的优点包括:

  • 将对象创建和业务逻辑分离,客户端只需要知道工厂类即可,不需要关心具体的实现细节。

  • 容易扩展,如果需要添加新的产品类,只需修改工厂类即可,符合开闭原则。

然而,简单工厂模式也有缺点,最主要的是当产品类较多时,工厂类会变得庞大且难以维护,违反了单一职责原则。

总的来说,简单工厂模式适合于需要创建的对象较少且不频繁变化的情况下使用,能够有效地封装对象的创建过程。

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

// 产品接口
class Product {
public:
    virtual void operation() = 0;
};

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

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

// 简单工厂类
class SimpleFactory {
public:
    Product *createProduct(int type)
    {
        switch (type) {
        case 1:
            return new ConcreteProductA;
        case 2:
            return new ConcreteProductB;
        default:
            return nullptr;
        }
    }
};

int main(int argc, char *argv[])
{
    SimpleFactory factory;

    // 创建产品A
    Product *productA = factory.createProduct(1);
    productA->operation();

    // 创建产品B
    Product *productB = factory.createProduct(2);
    productB->operation();

    return 0;
}
相关推荐
Elnaij几秒前
从C++开始的编程生活(23)——哈希表
开发语言·c++
nainaire7 分钟前
仿muduo库的Tcp服务器以及其应用层Http协议支持
服务器·网络·c++·tcp/ip·http
不想写代码的星星16 分钟前
C++ RAII:从“人肉记账”到“自动保姆”的资源管理革命
c++
Elnaij29 分钟前
从C++开始的编程生活(22)——红黑树
开发语言·c++
Trouvaille ~32 分钟前
【项目篇】从零手写高并发服务器(六):EventLoop事件循环——Reactor的心脏
linux·运维·服务器·c++·高并发·epoll·reactor模式
学嵌入式的小杨同学32 分钟前
STM32 进阶封神之路(十八):RTC 实战全攻略 —— 时间设置 + 秒中断 + 串口更新 + 闹钟功能(库函数 + 代码落地)
c++·stm32·单片机·嵌入式硬件·mcu·架构·硬件架构
学嵌入式的小杨同学32 分钟前
STM32 进阶封神之路(十七):RTC 实时时钟深度解析 —— 从时钟源到寄存器配置(底层原理 + 面试重点)
c++·stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb
.select.35 分钟前
STL下常见容器底层数据结构
开发语言·c++
老鱼说AI38 分钟前
CUDA架构与高性能程序设计:多维网格与数据
c++·人工智能·深度学习·神经网络·机器学习·语言模型·cuda
砍光二叉树1 小时前
【设计模式】创建型-工厂方法模式
设计模式·工厂方法模式