简单工厂模式

实现整数四则运算 (1) 基本实现  (2) 健壮实现  (3) 工厂模式

#pragma once
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;//(1)基本实现
void BasicFun() {int nNumberFirst, nNumberSecond;char cSymbol;cin >> nNumberFirst;cin >> nNumberSecond;cin >> cSymbol;if (cSymbol == '+') cout << nNumberFirst + nNumberSecond;if (cSymbol == '-') cout << nNumberFirst - nNumberSecond;if (cSymbol == '*')cout << nNumberFirst * nNumberSecond;if (cSymbol == '/')cout << nNumberFirst / nNumberSecond;getchar();return ;
}
//(2)规范和健壮性实现
void StandardAndRobustFun() {int  nNumberFirst, nNumberSecond;string strSymbol="";try {cin >> nNumberFirst;cin >> nNumberSecond;cin >> strSymbol;if (nNumberSecond == 0 && strSymbol[0] == '/') {cout << "error:The dividend cannot be zero ";return;}switch (strSymbol[0]) {case '+': cout << nNumberFirst + nNumberSecond << endl; break;case '-': cout << nNumberFirst - nNumberSecond << endl; break;case '*': cout << nNumberFirst * nNumberSecond << endl; break;case '/': cout << nNumberFirst / nNumberSecond << endl; break;default:cout << "Input Format Error" << endl; break;}}catch (void *pErrorKey) {cout << "Unknow Error" << endl;}return;
}
//(3)简单工厂模式
class COperationClass {
public:virtual bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) = 0;
};
class CAddition :public COperationClass {
public:bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) {nNumberAns = nNumberFirst + nNumberSecond;return true;}
};
class Csubtraction :public COperationClass {
public:bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) {nNumberAns = nNumberFirst - nNumberSecond;return true;}
};
class Cmultiplication :public COperationClass {
public:bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) {nNumberAns = nNumberFirst * nNumberSecond;return true;}
};class Cdivision :public COperationClass {
public:bool GetValue(const int &nNumberFirst, const int &nNumberSecond, int &nNumberAns) {if (nNumberSecond == 0) {return 0;}nNumberAns = nNumberFirst / nNumberSecond;return true;}
};class CFactory {
public:bool GetAlgorithm(const string &strSymbol, COperationClass * &pAlgorithm) {pAlgorithm = NULL;switch (strSymbol[0]) {case '+': pAlgorithm = new CAddition(); break;case '-': pAlgorithm = new Csubtraction(); break;case '*': pAlgorithm = new Cmultiplication(); break;case '/': pAlgorithm = new Cdivision(); break;default: return false;}return pAlgorithm != NULL;}
};int main()
{system("color 0b");//BasicFun();//StandardAndRobustFun();CFactory CFactorTest;COperationClass * pOperationNow = NULL;if (CFactorTest.GetAlgorithm("+", pOperationNow)) {int nComputerResult = 0;pOperationNow->GetValue(1, 2, nComputerResult);cout << nComputerResult << endl;delete(pOperationNow);}else {cout << "error" << endl;}getchar();return 0;
}

设计模式复习-简单工厂模式相关推荐

  1. 设计模式之简单工厂模式(Java 实现)

    设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...

  2. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  3. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  4. C#设计模式(2)——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

  5. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  6. .NET设计模式(1): 简单工厂模式

    .NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...

  7. JS常用的设计模式(2)——简单工厂模式

    JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...

  8. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

  9. 大牧絮叨设计模式:简单工厂模式

    文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...

最新文章

  1. Lesson 16.4 卷积遇见深度学习
  2. centos linux编译c,紧急提醒!Linux是如何编译C语言程序文件的?CentOS 8的gcc使用方法介绍...
  3. 如何控制product search attribute支持的操作类型
  4. Linux命令英文全称解释【转载】
  5. php写时间 自动,ThinkPHP6.0 自动写入时间戳
  6. 如何测量太阳距离地球的距离
  7. Spring Boot 高效入门实战
  8. 黄聪:用于 Web 应用程序项目部署的 Web.config 转换语法
  9. 第十三节:使用Lombok简化你的代码
  10. 大端与小端字节数据详解(转)
  11. python 分数等级转换_一文读懂,新高考“3+1+2”模式中等级赋分如何换算?
  12. 如何使用计算机勾绘汇水面积,第八章 地形测量_同济大学:测量学(八)_ppt_大学课件预览_高等教育资讯网...
  13. 计算机网络怎么算默认网关,ip地址子网掩码计算器_默认网关怎么计算_ip 掩码 网关的关系(2)...
  14. 计算机忘记密码WIN7,win7忘记密码强制重置方法
  15. 南桥和北桥-主板芯片组发展史
  16. 数据挖掘导论学习笔记 第五章 分类算法
  17. 阿拉伯文变形规范,阿拉伯语变形规则,阿拉伯文组合规则
  18. linux 平铺式桌面,Terminix:基于 GTK3 的平铺式 Linux 终端模拟器
  19. Android 初学者入门(一个最简单的应用程序)
  20. 系统盘修复计算机命令,win10系统无法正常开机提示引导文件丢失使用命令修复的方法 无需U盘...

热门文章

  1. 三周第五次课) 4.5/4.6 磁盘格式化 4.7/4.8 磁盘挂载 4.9 手动增加swap空间
  2. 《图解CSS3:核心技术与案例实战》——1.1节什么是CSS3
  3. 书写神器——markdown
  4. 在linux系统中安装VSCode(Visual Studio Code)
  5. java修饰符重新学习日记一
  6. 快速学习使用 Windows Azure 上的 SharePoint Server 2013
  7. 绝对Linux服务器管理利器webmin
  8. Rsync和Sersync(企业实时同步方案)
  9. Android内容观察者
  10. OS开发UI篇—popoverController使用注意