当前位置: 首页 > 网络知识

C++ 设计模式之工厂方法模式

时间:2026-01-29 09:15:06

设计模式之工厂方法模式


工厂方法模式,定义一个用于创建对象的接口,让子类决定实力化哪一个类。工厂方法使一个类的实例化延迟到其子类。其UML图如下:

  这里要区分一下工厂方法模式与简单工厂模式的区别。简单工厂模式需要在工厂类中判断要生产什么类型的对象。工厂方法模式则把这部分工作交给了客户端。每一种类对象都有自己的工厂,客户端根据自己的不同需要生成不同工厂,然后在生产自己需要的对象。工厂方法模式相对简单工厂模式来说降低了类与客户端的耦合度。最重要的一点是当需要添加其他的类的时候不用修改原来的代码。只需用添加响应的工厂就行了和类就行了。这样做遵循了开放封闭原则。而简单工厂模式实际是破坏了开放封闭原则。

其代码如下:

1 // FactoryMethodModel.h文件 2 #pragma once 3 #include <iostream> 4 // 操作类 5 template<typename T> 6 class Operation 7 14 virtual T getResult() = 0; 15 protected: 16 T lpa, rpa; 17 }; 18 //加法操作 19 template<typename T> 20 class AddOperation : public Operation<T> 21 27 virtual T getResult() 28 31 }; 32 // 减法操作 33 template<typename T> 34 class SubOperation : public Operation<T> 35 41 virtual T getResult() 42 45 }; 46 // 乘法操作 47 template<typename T> 48 class MulOperation : public Operation<T> 49 55 virtual T getResult() 56 59 }; 60 // 除法操作 61 template<typename T> 62 class DivOperation : public Operation<T> 69 virtual T getResult() 70 76 return this>lpa / this>rpa; 77 } 78 }; 79 // 工厂类 80 template<typename T> 81 class Factory 82 ; 86 // 加法工厂 87 template<typename T> 88 class AddFactory : public Factory<T> 89 95 }; 96 // 减法工厂 97 template<typename T> 98 class SubFactory : public Factory<T> 99 105 }; 106 // 乘法工厂 107 template<typename T> 108 class MulFactory : public Factory<T> 109 115 }; 116 // 除法工厂 117 template<typename T> 118 class DivFactory : public Factory<T> 119 125 };

测是代码如下:

1 #include <iostream> 2 #include "FactoryMethodModel.h" 3 4 int main() 5

测试结果如下图:



上一篇:C++ 设计模式之责任链模式
下一篇:C++ 设计模式之装饰模式
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素