C++如何实现一个工厂模式?(设计模式示例)

工厂模式的核心是封装对象创建过程,避免直接new;C++中常用简单工厂和工厂方法模式;通过抽象产品接口Product及ConcreteProductA等具体实现,实现多态与解耦。

c++如何实现一个工厂模式?(设计模式示例)

工厂模式的核心是把对象的创建过程封装起来,让调用方不直接 new 具体类,而是通过一个统一接口获取实例。C++ 中常用的是简单工厂(非 GoF 标准但实用)和工厂方法(标准 GoF 模式),下面用一个清晰、可运行的例子说明。

定义抽象产品接口

所有具体产品都要继承这个基类,保证多态性:

class Product {public:    virtual ~Product() = default;    virtual void operation() const = 0;};

实现多个具体产品

每个子类提供自己的行为逻辑:

class ConcreteProductA : public Product {public:    void operation() const override {        std::cout << "ConcreteProductA executed.n";    }};class ConcreteProductB : public Product {public:    void operation() const override {        std::cout << "ConcreteProductB executed.n";    }};

实现简单工厂类

工厂负责根据参数决定创建哪个具体类型,返回智能指针更安全:

立即学习“C++免费学习笔记(深入)”;

class SimpleFactory {public:    enum class ProductType {        A, B    };    static std::unique_ptr createProduct(ProductType type) {        switch (type) {            case ProductType::A:                return std::make_unique();            case ProductType::B:                return std::make_unique();            default:                return nullptr;        }    }};

使用方式简洁明了:

auto p1 = SimpleFactory::createProduct(SimpleFactory::ProductType::A);auto p2 = SimpleFactory::createProduct(SimpleFactory::ProductType::B);if (p1) p1->operation(); // 输出 A 的行为if (p2) p2->operation(); // 输出 B 的行为

进阶:工厂方法模式(支持扩展)

当需要支持新增产品且不想修改原有工厂时,可以定义抽象工厂接口:

class Creator {public:    virtual std::unique_ptr factoryMethod() const = 0;    void someOperation() const {        auto product = factoryMethod();        if (product) product->operation();    }};class ConcreteCreatorA : public Creator {public:    std::unique_ptr factoryMethod() const override {        return std::make_unique();    }};class ConcreteCreatorB : public Creator {public:    std::unique_ptr factoryMethod() const override {        return std::make_unique();    }};

这样每新增一类产品,只需新增一对 具体产品 + 具体工厂,完全符合开闭原则。

基本上就这些。简单工厂适合内部逻辑固定、变化少的场景;工厂方法更适合框架或插件化设计。关键点在于解耦创建与使用,避免硬编码 new,便于测试和替换实现。

以上就是C++如何实现一个工厂模式?(设计模式示例)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1488668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 11:45:01
下一篇 2025年12月19日 11:45:13

相关推荐

发表回复

登录后才能评论
关注微信