C++设计模式-继承与多态影响耦合性(最基础的简单工厂模式小实例)
继承与多态影响耦合性(最基础的简单工厂模式小实例)
原理:
通过继承和虚函数的方式修改某个子类对应函数的功能;
通过简单工厂模式到底实例化谁;
如果要增加复杂的运算只有增加响应的子类,以及工厂的分支即可;
程序运行截图如下:
目录结构如下:
源码如下:
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.起因 最近在看一本大话设计模式一书,感觉上面讲述的富有故事性,引导你一步一步的走进设计模式的世界.首先我先看到的是简单工厂模式,对此我想给自己做一个总结,给自己做一个提示. 2. ...
- 《设计模式入门》 1.简单工厂模式
简单工厂模式(Simple Factory Pattern)不属于GoF 23种设计模式,我们通常将它作为学习其他工厂模式的入门.是由一个工厂对象决定创建出哪一种产品类的实例.简单来说就是我们抽取一个 ...
- 设计模式:简单工厂模式(C++)【看不懂算我输】
简单工厂模式介绍 简单工厂模式并不是Gof四人帮搞的23中设计模式中的一种,只不过大部分的设计模式书籍都会介绍它.所有我们还是来看看它,或许你觉得很简单.但是我们可以瞧瞧它有什么优点和缺点.如何进行改 ...
- Java设计模式之简单工厂模式(Simple Factory)
[Java与模式]简单工厂模式(Simple Factory---吴义) 首先说明,Java与模式一系列的文章均是参考阎宏博士的<Java与模式>一书,加上自身的一些体会的探索,产生如下文 ...
- Java设计模式之 简单工厂模式和工厂方法实验报告书
目录 Java设计模式之 1 简单工厂模式和工厂方法实验报告书 1 实验四:简单工厂模式和工厂方法 2 一.实验目的 2 二.实验内容 2 三.实验步骤 2 3.1简单工厂模式:女娲 2 3.2简单工 ...
- [Python设计模式] 第1章 计算器——简单工厂模式
github地址:https://github.com/cheesezh/python_design_patterns 写在前面的话 """ 读书的时候上过<设计模 ...
- 设计模式之 - 简单工厂模式
一.什么是简单工厂模式 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,一个抽 ...
- Java设计模式(二)简单工厂模式—设计模式六大原则
文章目录 设计模式六大原则 1. 开闭原则 2. 里氏代换原则 3. 依赖倒转原则 4. 接口隔离原则 5. 迪米特法则(最少知道原则) 6. 合成复用原则 工厂设计模式 什么是工厂模式 工厂模式的好 ...
- 设计模式(1)--简单工厂模式、策略模式
设计模式(1)--简单工厂模式.策略模式 1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static ...
最新文章
- 最后8小时 | 最新智能驾驶视觉技术行业研究报告出炉!圈内从业者、投资人不可错过...
- 实现接口时@Override注解问题
- Java培训:什么是Java?为什么大家都学习Java技术?
- 轻量级消息队列RedisQueue
- 7-7 硬币找钱问题 (10 分)(思路+详解+double类型数据的处理)Come baby!!!!!!!!!!!!!!!!!!!!
- XML解析之JAXP案例详解
- java 高飞_高飞(土木与水利工程学院)老师 - 合肥工业大学
- CSP 1.0 语言规范
- 超60亿元,新华三领衔华为锐捷中兴中标中国移动高端路由器和交换机集采
- c语言中逻辑运算符中感叹号,某棋牌 -官网
- WindowsXP相关设置对应的注册表位置
- 给自己的逆向工程阶段性学习感想总结
- MySql-STDEV、STDEVP、VAR、VARP
- python 操作word教程_Python 使用 win32com 模块对word文件进行操作
- Error: couldn‘t connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error
- 韩顺平--IO流专题
- cmd窗口执行cnpm报错记录:FullyQualifiedErrorId : UnauthorizedAccess或者因为在此系统上禁止运行脚本。有关详细信息,请参阅https。。
- 微信直播怎么弄?知识干货都在这里了
- 我输入,你生成代码,手写代码生成
- 卡莱特led显示屏调试教程_卡莱特千兆网卡控制双模卡调屏教程