继承与多态影响耦合性(最基础的简单工厂模式小实例)

原理:
通过继承和虚函数的方式修改某个子类对应函数的功能;
通过简单工厂模式到底实例化谁;

如果要增加复杂的运算只有增加响应的子类,以及工厂的分支即可;

程序运行截图如下:

目录结构如下:

源码如下:

OperationFactory.h

#pragma once#include "Operation.h"
#include "OtherOperation.h"
#include <iostream>
#include <string>
using namespace std;class OperationFactory{
public:static Operation *createOperate(string operateStr){Operation *operation;if(operateStr == "+")operation = new OperationAdd;else if(operateStr == "-")operation = new OperationSub;else if(operateStr == "*")operation = new OperationMul;else if(operateStr == "/")operation = new OperationDiv;else throw "The operation is wrong";return operation;}
};

Oeration.h

#pragma once
class Operation
{
public:double getNumberA();double getNumberB();void setNumberA(const double numberA);void setNumberB(const double numberB);virtual double getResult();virtual ~Operation();//protected:double m_numberA;double m_numberB;
};

OtherOperation.h

#pragma once#include "Operation.h"
#include <iostream>
using namespace std;class OperationAdd:public Operation{
public:double getResult() override{return m_numberA + m_numberB;}~OperationAdd(){cout << "~OperationAdd called!" << endl;}
};class OperationSub:public Operation{
public:double getResult() override{return m_numberA - m_numberB;}~OperationSub(){cout << "~OperationSub called!" << endl;}
};class OperationMul:public Operation{
public:double getResult() override{return m_numberA * m_numberB;}~OperationMul(){cout << "~OperationMul called!" << endl;}
};class OperationDiv:public Operation{
public:double getResult() override{if(m_numberB == 0)throw "The divisor cannot be 0";return m_numberA / m_numberB;}~OperationDiv(){cout << "~OperationDiv called!" << endl;}
};

main.cpp

#include "OperatinFactory.h"int main(){double num1, num2;string operStr;cout << "Please in put NumA:";cin >> num1;cout << "Please in put operation:";cin >> operStr;cout << "Please in put NumB:";cin >> num2;Operation *oper;try{oper = OperationFactory::createOperate(operStr);oper->setNumberA(num1);oper->setNumberB(num2);cout << "The result is " << oper->getResult() << endl;delete oper;}catch(const char *msg){cout << "The error : " << msg << endl;}system("pause");return 0;
}

Operation.cpp

#include "Operation.h"
#include <iostream>
using namespace std;double Operation::getNumberA()
{return m_numberA;
}double Operation::getNumberB()
{return m_numberB;
}void Operation::setNumberA(const double numberA)
{m_numberA = numberA;
}void Operation::setNumberB(const double numberB)
{m_numberB = numberB;
}double Operation::getResult()
{return 0.0;
}Operation::~Operation()
{cout << "~Operation called" << endl;
}

UML类图如下:

C++设计模式-继承与多态影响耦合性(最基础的简单工厂模式小实例)相关推荐

  1. 大话设计模式之简单工厂模式

    一.简单工厂模式 1.起因 最近在看一本大话设计模式一书,感觉上面讲述的富有故事性,引导你一步一步的走进设计模式的世界.首先我先看到的是简单工厂模式,对此我想给自己做一个总结,给自己做一个提示. 2. ...

  2. 《设计模式入门》 1.简单工厂模式

    简单工厂模式(Simple Factory Pattern)不属于GoF 23种设计模式,我们通常将它作为学习其他工厂模式的入门.是由一个工厂对象决定创建出哪一种产品类的实例.简单来说就是我们抽取一个 ...

  3. 设计模式:简单工厂模式(C++)【看不懂算我输】

    简单工厂模式介绍 简单工厂模式并不是Gof四人帮搞的23中设计模式中的一种,只不过大部分的设计模式书籍都会介绍它.所有我们还是来看看它,或许你觉得很简单.但是我们可以瞧瞧它有什么优点和缺点.如何进行改 ...

  4. Java设计模式之简单工厂模式(Simple Factory)

    [Java与模式]简单工厂模式(Simple Factory---吴义) 首先说明,Java与模式一系列的文章均是参考阎宏博士的<Java与模式>一书,加上自身的一些体会的探索,产生如下文 ...

  5. Java设计模式之 简单工厂模式和工厂方法实验报告书

    目录 Java设计模式之 1 简单工厂模式和工厂方法实验报告书 1 实验四:简单工厂模式和工厂方法 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1简单工厂模式:女娲 2 3.2简单工 ...

  6. [Python设计模式] 第1章 计算器——简单工厂模式

    github地址:https://github.com/cheesezh/python_design_patterns 写在前面的话 """ 读书的时候上过<设计模 ...

  7. 设计模式之 - 简单工厂模式

    一.什么是简单工厂模式 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,一个抽 ...

  8. Java设计模式(二)简单工厂模式—设计模式六大原则

    文章目录 设计模式六大原则 1. 开闭原则 2. 里氏代换原则 3. 依赖倒转原则 4. 接口隔离原则 5. 迪米特法则(最少知道原则) 6. 合成复用原则 工厂设计模式 什么是工厂模式 工厂模式的好 ...

  9. 设计模式(1)--简单工厂模式、策略模式

    设计模式(1)--简单工厂模式.策略模式 1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static ...

最新文章

  1. 最后8小时 | 最新智能驾驶视觉技术行业研究报告出炉!圈内从业者、投资人不可错过...
  2. 实现接口时@Override注解问题
  3. Java培训:什么是Java?为什么大家都学习Java技术?
  4. 轻量级消息队列RedisQueue
  5. 7-7 硬币找钱问题 (10 分)(思路+详解+double类型数据的处理)Come baby!!!!!!!!!!!!!!!!!!!!
  6. XML解析之JAXP案例详解
  7. java 高飞_高飞(土木与水利工程学院)老师 - 合肥工业大学
  8. CSP 1.0 语言规范
  9. 超60亿元,新华三领衔华为锐捷中兴中标中国移动高端路由器和交换机集采
  10. c语言中逻辑运算符中感叹号,某棋牌 -官网
  11. WindowsXP相关设置对应的注册表位置
  12. 给自己的逆向工程阶段性学习感想总结
  13. MySql-STDEV、STDEVP、VAR、VARP
  14. python 操作word教程_Python 使用 win32com 模块对word文件进行操作
  15. Error: couldn‘t connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error
  16. 韩顺平--IO流专题
  17. cmd窗口执行cnpm报错记录:FullyQualifiedErrorId : UnauthorizedAccess或者因为在此系统上禁止运行脚本。有关详细信息,请参阅https。。
  18. 微信直播怎么弄?知识干货都在这里了
  19. 我输入,你生成代码,手写代码生成
  20. 卡莱特led显示屏调试教程_卡莱特千兆网卡控制双模卡调屏教程

热门文章

  1. 网络通信程序做个瞬间的扫描判断
  2. 飞鸽传书扫描器 v1.3
  3. 用C++实现可重用的数学例程
  4. 告别刷抖音!30秒一个Python小例子,总有一款适合你,赶紧收藏!
  5. 第六节:用audio标签打造一个属于自己的HTML5音乐播放器
  6. javascript 字符串操作函数大全
  7. Android textedit 背景,Android EditText 的使用及值得注意的地方
  8. php mysqli报错,php安装扩展mysqli的实现步骤及报错解决办法
  9. Pytorch中参数和模型的保存与读取
  10. 聊聊用于特征处理的tsfresh