C++实现常见设计模式:Factory方法解析

需积分: 0 1 下载量 21 浏览量 更新于2024-07-28 收藏 1.08MB PDF 举报
"常见设计模式的解析和实现(C++)" 设计模式是软件工程中的一种最佳实践,它们提供了在特定场景下解决常见问题的标准方案。在本资料中,主要讨论的是Factory Method(工厂方法)设计模式,它是创建型设计模式的一种。Factory Method模式允许将对象的创建过程封装在一个方法中,使得子类可以决定实例化哪个类,从而实现了对创建过程的抽象和解耦。 **Factory Method模式的核心组件:** 1. **Product(产品)**: 这是一个抽象基类,定义了所有由工厂方法创建的对象的公共接口。在示例中,`Product` 是一个抽象类,代表了所有可能被创建的类的共同基础。 2. **ConcreteProduct(具体产品)**: 实现了 `Product` 接口的具体类,如 `ConcreateProduct`,这些类是由工厂方法实际创建的实例。 3. **Creator(创建者)**: 这是工厂方法的抽象基类,通常包含一个或多个抽象或虚拟的工厂方法,如 `Creator::FactoryMethod`。这个方法在基类中声明,但由其子类实现。 4. **ConcreteCreator(具体创建者)**: `Creator` 的子类,实现工厂方法并返回一个 `Product` 或其具体子类的实例。每个 `ConcreteCreator` 对应一个 `ConcreteProduct`,负责创建与之匹配的实例。 **Factory Method模式的工作原理:** - 在代码中,我们使用 `Creator` 类的指针或引用,而不是直接实例化具体的 `Product` 类。这样,当我们需要更改创建逻辑或添加新类型时,只需要扩展 `ConcreteCreator` 类即可,无需修改现有代码。 - `Creator` 类定义了一个工厂方法,这个方法的实现由它的子类提供。子类的工厂方法根据需要返回相应的 `ConcreteProduct` 实例。 - `Factory Method` 模式鼓励使用继承来改变行为,而不是使用硬编码的条件语句。这使得代码更加模块化,更易于维护和扩展。 **示例实现:** 在提供的代码片段中,`Factory.h` 文件包含了 `Product`、`ConcreateProduct` 和 `Creator` 类的定义。`ConcreateProduct` 是一个具体的实现,而 `Creator` 类含有一个名为 `FactoryMethod` 的纯虚函数,这个函数将在子类中实现以创建 `ConcreateProduct` 的实例。 ```cpp // Creator 类 class Creator { public: virtual ~Creator() {} virtual Product* FactoryMethod() = 0; }; // ConcreteCreator 类示例 class ConcreteCreator : public Creator { public: ConcreteCreator() {} virtual ~ConcreteCreator() {} virtual Product* FactoryMethod() override { return new ConcreateProduct(); } }; ``` **总结:** Factory Method 设计模式提供了一种创建对象的抽象方式,使得创建过程与使用过程分离,提高了代码的可扩展性和可维护性。在 C++ 中,通过继承和多态机制,我们可以灵活地添加新的产品类型和对应的工厂,而无需修改已有代码。这种模式在实际开发中非常常见,特别是在需要动态选择或扩展对象创建逻辑时。