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

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.xdnf.cn/news/20387.html

相关文章:

  • redis-----事务
  • SDRAM-08 数据手册解读
  • python系列之综合项目:智能个人任务管理系统
  • HTML标签之超链接
  • 《UE5_C++多人TPS完整教程》学习笔记48 ——《P49 瞄准偏移(Aim Offset)》
  • 【LeetCode热题100道笔记】二叉搜索树中第 K 小的元素
  • Flink-新增 Kafka source 引发状态丢失导致启动失败
  • 2.2 Web和Http
  • 从0死磕全栈第五天:React 使用zustand实现To-Do List项目
  • MySQL事务日志类型及作用解析
  • Eigen中Eigen::Affine3d和Eigen::Isometry3d详解
  • 得物前端二面面经总结
  • LeetCode_数学
  • 解析、创建Excel文件的开源库OpenXLSX介绍
  • ES06-SpringData集成
  • Valgrind检测内存泄漏入门指南
  • ClickHouse 中的物化列与物化视图
  • SpringBoot01-配置文件
  • 未来教育行业的 Go 服务开发解决方案与实践
  • 【PyTorch实战:Tensor】4、NumPy与PyTorch Tensor指南:深度学习中的数据操作与转换
  • Python基础(①⑧Queue)
  • 机床夹具设计 +选型
  • 持续集成和持续交付 (CI/CD) 工具——Jenkins
  • `objdump`与`addr2line`工具详解
  • 新服务器初始化:Git全局配置与SSH密钥生成
  • 【Canvas与图标】古铜色“HTML”图标
  • eclipse 安装 lombok
  • 【基础-单选】下列哪一项不属于ArkUI组件的公共事件?
  • JVM调优总结
  • ECharts Gallery:Apache官方数据可视化模板库,助你快速制作交互图表并实现深度定制