-
1 简介: 工厂方法模式是一种创建型设计模式,用于通过一个公共接口来创建具体对象,而无需在客户端代码中显式指定其具体类。它将对象的实例化委托给工厂类,由工厂类根据客户端的请求创建相应的对象。
-
2 实现步骤: 以下是使用C++实现工厂方法模式的步骤:
a. 定义产品接口:首先,定义一个产品接口,该接口声明了产品类的公共方法。
class Product { public:virtual void operation() = 0; };
b. 实现具体产品类:创建实现产品接口的具体产品类。
class ConcreteProductA : public Product { public:void operation() override {// 具体产品A的操作} };class ConcreteProductB : public Product { public:void operation() override {// 具体产品B的操作} };
c. 定义工厂接口:创建一个工厂接口,声明用于创建产品的工厂方法。
class Factory { public:virtual Product* createProduct() = 0; };
d. 实现具体工厂类:创建具体工厂类来实现工厂接口,根据客户端的请求创建相应的产品。
class ConcreteFactoryA : public Factory { public:Product* createProduct() override {return new ConcreteProductA();} };class ConcreteFactoryB : public Factory { public:Product* createProduct() override {return new ConcreteProductB();} };
3 示例代码: 以下是一个使用工厂方法模式的示例代码:
#include <iostream>int main() {// 使用具体工厂A创建产品AFactory* factoryA = new ConcreteFactoryA();Product* productA = factoryA->createProduct();productA->operation();// 使用具体工厂B创建产品BFactory* factoryB = new ConcreteFactoryB();Product* productB = factoryB->createProduct();productB->operation();delete factoryA;delete factoryB;delete productA;delete productB;return 0; }
-
上述代码中,客户端使用不同的具体工厂来创建不同的产品,并调用产品的操作方法。
-
4 优点:
- 将对象的创建与使用分离,降低耦合性。
- 客户端代码无需知道具体产品类,只需要关心产品接口。
- 可以灵活扩展新的产品和工厂,符合开闭原则。
-
5 注意事项:
- 工厂方法模式适用于创建复杂对象或对象构建过程需要进行某些额外处理的场景。
- 使用工厂方法模式时,需确保每个具体产品都对应一个具体工厂。