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

工厂设计模式是一种常见的创建型设计模式,它通过提供一个创建对象的接口,将对象的实例化过程延迟到子类中完成,或者由专门的工厂类来处理。在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
微信扫一扫
支付宝扫一扫