当前位置: 首页 > news >正文

3、工厂模式

模式解释

百度:

主要用于创建对象。用一个工厂来根据输入的条件产生不同的类,然后根据不同类的虚函数
得到不同的结果。

主要解决的问题:

1、接口选择问题

可应用的场景:计算器中对于同样的输入,执行不同的操作:加、减、乘、除。

代码用法实例呈现

1、计算器类+运算符类作为产品

2、工厂类作为使用

实现步骤:

1、虚函数 + 子类继承       

2、对抽象产品类 另外改造成具体实现类

3、建造工厂类,用抽象的产品类作为“函数类型定义”,具体实现类作“函数返回值

返回类型 函数名(参数列表) {// 函数体return 表达式;  // 返回值必须与返回类型匹配
}

源码呈现

计算器类:(抽象产品类)

//抽象产品类
class Test {
public:int a=1;int b=1;virtual double getResult() {cout << "正在调用:" << __FUNCTION__ << ": ";return 0;}};

运算符类:(具体产品类)

//-------------
//具体产品类实现
class add_Test :public Test {//“+”
public:double getResult() override{cout <<"正在调用:" << __FUNCTION__ << ": ";double ans = a + b;return ans;}};
class sub_Test :public Test {//“-”
public:double getResult() override {cout << "正在调用:" << __FUNCTION__ << ": ";double ans = a - b;return ans;}};
class mul_Test :public Test {//“*”
public:double getResult() override {cout << "正在调用:" << __FUNCTION__ << ": ";double ans = a * b;return ans;}};
class div_Test :public Test {//“/”
public:double getResult() override {cout << "正在调用:" << __FUNCTION__ << ": ";double ans = a / b;return ans;}};
//----------------------

工厂类:

//工厂类
class factory {
public:static Test* create(char x) {cout << "正在调用:" << __FUNCTION__ << ": ";switch (x){case '+':	return new add_Test();case '-':	return new sub_Test();case '*':	return new mul_Test();case '/':	return new div_Test();default:cout << "运算符错误." << endl;return NULL;break;}}};

main 函数调用:

#include <iostream>
#include <vector>using namespace std;int  main() {int a, b;cout << "输入 a,b 的值:";cin >> a >> b;Test* t = factory::create('+');t->a = a;t->b = b;cout << "结果:" << t->getResult() << endl;t = factory::create('/');t->a = a;t->b = b;cout << "结果:" << t->getResult() << endl;return 0;
}

结果展示:

http://www.dtcms.com/a/370555.html

相关文章:

  • 2025高教社国赛数学建模竞赛B题完整参考论文(含模型和代码)
  • MCP Token超限问题解决方案
  • 并行编程实战——CUDA编程的纹理内存
  • 京东商品评论API开发指南
  • Day27 函数2 装饰器
  • YOLOv8支持旋转框检测(OBB)任务随记
  • 解决VMWare网络适配器的桥接模式 ping 重复数据包DUP问题
  • Elasticsearch优化从入门到精通
  • 【开题答辩全过程】以电商数据可视化系统为例,包含答辩的问题和答案
  • 大模型热潮中的“连接器”:深入解析模型上下文协议 (MCP)
  • Java学习笔记二(类)
  • NPU边缘推理识物系统
  • 避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
  • 贪心算法应用:保险理赔调度问题详解
  • ERP系统价格一般要多少?ERP定制开发性价比高,功能模块自由选配
  • 接口权限验证有哪些方式
  • 【数据分享】土地利用shp数据分享-广东
  • C++基础知识
  • 从“帮写文案”到“管生活”:个人AI工具的边界在哪?
  • --定位--
  • 一、算法与数据结构的本质关系:灵魂、肉体与图书馆
  • 【Python自动化】 21.3 Pandas Series 核心数据结构完全指南
  • MySQL DBA需要掌握的 7 个问题
  • Docker加速下载镜像的配置指南
  • 从“能说话”到“会做事”:AI工具如何重塑普通人的工作与生活?
  • RAG提示词分解
  • 第三节:HTML5 高级特性与应用​
  • 【C++】模板和STL
  • react生命周期,详细版本
  • NLWeb与AutoRAG跨境电商RAG推荐API接入实战教程