C++ 工厂模式怎么写_C++设计模式解耦实战

admin 百科 19
工厂模式通过封装对象创建过程实现解耦,C++中可采用简单工厂、工厂方法或注册机制;推荐使用静态映射表结合函数指针的注册式工厂,实现运行时动态创建,提升扩展性与模块化程度。

C++ 工厂模式怎么写_C++设计模式解耦实战-第1张图片-佛山资讯网

工厂模式是一种常用的设计模式,主要用于对象的创建过程解耦。在 C++ 中使用工厂模式,可以让程序在不修改原有代码的情况下扩展新类型,提升可维护性和可扩展性。下面通过一个实际场景来说明如何用 C++ 实现工厂模式,并实现模块间的解耦。

1. 为什么需要工厂模式

假设你正在开发一个绘图系统,需要绘制圆形、矩形、三角形等图形。如果直接在主逻辑中使用 new Circlenew Rectangle,那么每当新增一种图形,就必须修改代码,违反了“开闭原则”(对扩展开放,对修改关闭)。

工厂模式的核心思想是:把对象的创建过程封装起来,由一个“工厂”来统一负责创建对象,调用方无需知道具体类名,只需提供标识或条件即可获取实例。

2. 简单工厂模式(Simple Factory)

简单工厂不是严格意义上的设计模式,但很实用。它通过一个工厂类根据输入参数决定创建哪种对象。

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

// 图形基类 class Shape { public: virtual void draw() = 0; virtual ~Shape() = default; };

// 具体图形类 class Circle : public Shape { public: void draw() override { std::cout wing a Circle\n"; } };

class Rectangle : public Shape { public: void draw() override { std::cout

// 工厂类 class ShapeFactory { public: static Shape* createShape(const std::string& type) { if (type == "circle") { return new Circle(); } else if (type == "rectangle") { return new Rectangle(); } return nullptr; } };

使用方式:

Shape* shape = ShapeFactory::createShape("circle"); shape->draw();

优点是调用简单;缺点是新增类型需要修改工厂方法,不够灵活。

3. 工厂方法模式(Factory Method)

为了解决简单工厂的扩展问题,可以使用工厂方法模式——为每种产品定义一个对应的工厂类。

// 工厂接口 class ShapeFactory { public: virtual Shape* createShape() = 0; virtual ~ShapeFactory() = default; };

// 圆形工厂 class CircleFactory : public ShapeFactory { public: Shape* createShape() override { return new Circle(); } };

// 矩形工厂 class RectangleFactory : public ShapeFactory { Shape* createShape() override { return new Rectangle(); } };

客户端代码:

ShapeFactory* factory = new CircleFactory(); Shape* shape = factory->createShape(); shape->draw();

这样,增加新图形时只需添加新的工厂类,不需要改动已有逻辑,符合开闭原则。

标签: c++ win 简单工厂模式 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~