c++如何实现工厂设计模式_c++创建型设计模式实战

工厂模式通过分离对象创建与使用提升代码可维护性;简单工厂用参数决定实例化类型,适合固定场景;工厂方法由子类决定创建具体产品,符合开闭原则;抽象工厂用于创建一系列相关产品,适用于多产品族场景。

c++如何实现工厂设计模式_c++创建型设计模式实战

工厂设计模式是一种常见的创建型设计模式,它通过提供一个创建对象的接口,将对象的实例化过程延迟到子类中完成,或者由专门的工厂类来处理。在C++中,使用工厂模式可以有效解耦对象的创建与使用,提升代码的可维护性和扩展性。

简单工厂模式(Simple Factory)

简单工厂模式不是23种设计模式之一,但它是理解工厂模式的基础。它通过一个工厂类根据传入的参数决定创建哪一种产品对象。

假设我们要创建不同类型的图形(如圆形、矩形),可以定义一个基类 Shape:

class Shape {public:    virtual void draw() = 0;    virtual ~Shape() = default;};class Circle : public Shape {public:    void draw() override {        std::cout << "Drawing a Circlen";    }};class Rectangle : public Shape {public:    void draw() override {        std::cout << "Drawing a Rectanglen";    }};

接着定义一个工厂类,根据类型创建具体对象:

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

class ShapeFactory {public:    static std::unique_ptr createShape(const std::string& type) {        if (type == "circle") {            return std::make_unique();        } else if (type == "rectangle") {            return std::make_unique();        }        return nullptr;    }};

使用方式如下:

auto shape = ShapeFactory::createShape("circle");if (shape) {    shape->draw();}

这种方式适合产品种类较少且不常变动的情况。

工厂方法模式(Factory Method)

工厂方法模式将对象的创建交由子类决定,定义一个用于创建对象的接口,但让子类决定实例化哪一个类。

定义抽象工厂接口:

class ShapeFactory {public:    virtual std::unique_ptr createShape() = 0;    virtual ~ShapeFactory() = default;};class CircleFactory : public ShapeFactory {public:    std::unique_ptr createShape() override {        return std::make_unique();    }};class RectangleFactory : public ShapeFactory {public:    std::unique_ptr createShape() override {        return std::make_unique();    }};

客户端通过具体的工厂来创建对象:

std::unique_ptr factory = std::make_unique();auto shape = factory->createShape();shape->draw();

这种结构更符合开闭原则,新增图形类型时只需添加新的工厂类,无需修改已有代码。

抽象工厂模式(Abstract Factory)

当需要创建一系列相关或依赖对象时,比如不同主题下的UI组件(按钮、文本框),抽象工厂更为合适。

例如,定义按钮和文本框接口:

class Button {public:    virtual void render() = 0;    virtual ~Button() = default;};class TextBox {public:    virtual void display() = 0;    virtual ~TextBox() = default;};

定义具体产品:

class DarkButton : public Button {public:    void render() override {        std::cout << "Rendering Dark Buttonn";    }};class LightButton : public Button {public:    void render() override {        std::cout << "Rendering Light Buttonn";    }};class DarkTextBox : public TextBox {public:    void display() override {        std::cout << "Displaying Dark Text Boxn";    }};

定义抽象工厂:

class UIWidgetFactory {public:    virtual std::unique_ptr

客户端使用:

std::unique_ptr factory = std::make_unique();auto button = factory->createButton();auto textbox = factory->createTextBox();button->render();textbox->display();

抽象工厂确保一组相关产品被统一创建,适用于多维度变化的产品族。

总结与建议

工厂模式的核心是将对象创建与使用分离。选择哪种工厂模式取决于需求:

简单工厂:逻辑简单,适合固定类型对象创建。 工厂方法:强调继承和扩展,适合单一产品等级结构。 抽象工厂:处理多个产品族,适合复杂系统中成套组件创建。

在实际项目中,结合智能指针(如 unique_ptr)能有效管理资源,避免内存泄漏。同时,配合配置文件或运行时参数动态选择工厂,可进一步提升灵活性。

基本上就这些。掌握这三种工厂模式,能显著提升C++项目的架构质量。

以上就是c++++如何实现工厂设计模式_c++创建型设计模式实战的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 12:33:51
下一篇 2025年12月19日 12:34:04

相关推荐

发表回复

登录后才能评论
关注微信