简单工厂模式的美妙体会06离散音符

(续上篇)次日,小菜再来找大鸟,问道:“你昨天说计算器这样的小程序还可以用到面向对象三大特性?继承和多态怎么可能用得上,我实在不可理解。”大鸟:“小菜很有钻研精神嘛!好,今天我让你功力加深一级。你先要考虑一下,你昨天写的这个代码,能否做到很灵活的可修改和扩展呢?”小菜:“我已经把业务和界面分离了呀,这不是很灵活了吗?”大鸟:“那我问你,现在如果我希望增加一个开根(sqrt)运算,你如何改?”小菜:“那只需要改Operation类就行了,在switch中加一个分支就行了。”大鸟:“问题是你要加一个平方根运算,却需要把加减乘除的运算都得来参与编译,如果你一不小心,把加法运算改成了减法,这不是大大的糟糕。

打个比方,如果现在公司要求你为公司的薪资管理系统做维护,原来只有技术人员(月薪),市场销售人员(底薪+提成),经理(年薪+股份)三种运算算法,现在要增加兼职工作人员的(时薪)算法,但按照你昨天的程序写法,公司就必须要把包含有的原三种算法的运算类给你,让你修改,你如果心中小算盘一打,‘TMD,公司给我的工资这么低,我真是郁闷,这会有机会了’,于是你除了增加了兼职算法以外,在技术人员(月薪)算法中写了一句:

那就意味着,你的月薪每月都会增加10%(小心被抓去坐牢),本来是让你加一个功能,却使得原有的运行良好的功能代码产生了变化,这个风险太大了。你明白了吗?”小菜:“哦,你的意思是,我应该把加减乘除等运算分离,修改其中一个不影响另外的几个,增加运算算法也不影响其它代码,是这样吗?”大鸟:“自己想去吧,如何用继承和多态,你应该有感觉了。”小菜:“OK,我马上去写。”

//运算类工厂publicclassOperationFactory{publicstringcreateOperate(stringoperate){Calculatorcalc=null;switch(operate){case"+":calc=newCalculatorAdd();break;case"-":calc=newCalculatorSub();break;case"*":calc=newCalculatorRide();break;case"/":calc=newCalculatorDiv();break;}returncalc;}}运算类工厂大鸟:“哈,看到吧,这样子,你只需要输入运算符号,工厂就实例化出合适的对象,通过多态,返回父类的方式实现了计算器的结果。”

//中间类publicclassOperation{publicstaticdoubleGetResult01(doublenumberA,doublenumberB,stringoperate){doubleresult=0d;Calculatorcalc=null;calc=OperationFactory.createOperate(operate);calc.NumberA=numberA;cal.NumberB=numberB;result=calc.GetResult();returnresult;}}中间类大鸟:“哈,界面的实现就是这样的代码,不管你是控制台程序,Windows程序,Web程序,PDA或手机程序,都可以用这段代码来实现计算器的功能,当有一天我们需要更改加法运算,我们只需要改哪里?”小菜:“改OperationAdd就可以了。”大鸟:“那么我们需要增加各种复杂运算,比如平方根,立方根,自然对数,正弦余弦等,如何做?”小菜:“只要增加相应的运算子类就可以了呀。”大鸟:“嗯?够了吗?”小菜:“对了,还需要去修改运算类工厂,在switch中增加分支。”大鸟:“哈,那才对,那如果要修改界面呢?”小菜:“那就去改界面呀,关运算什么事呀。”

classInheritPoly{staticvoidMain(string[]args){try{Console.Write("请输入数字A:");stringstrNumberA=Console.ReadLine();Console.Write("请选择运算符号(+、-、*、/):");stringstrOperate=Console.ReadLine();Console.Write("请输入数字B:");stringstrNumberB=Console.ReadLine();stringstrResult="";strResult=Convert.ToString(Operation.GetResult01(Convert.ToDouble(strNumberA),Convert.ToDouble(strNumberB),strOperate);Console.WriteLine("结果是:"+strResult);Console.readLine();}catch(Exceptionex){Console.WriteLine("您这里输入有错:"+ex.Message);}}}界面实现小菜:“回想那天我面试题写的代码,我终于明白我为什么写得不成功了,原来一个小小的计算器也可以写出这么精彩的代码,谢谢大鸟。”

(下为当时面试题时小菜所写代码,见《小菜编程成长记(一)》)

classProgram{staticvoidMain(string[]args){Console.Write("请输入数字A:");stringA=Console.ReadLine();Console.Write("请选择运算符号(+、-、*、/):");stringB=Console.ReadLine();Console.Write("请输入数字B:");stringC=Console.ReadLine();stringD="";if(B=="+")D=Convert.ToString(Convert.ToDouble(A)+Convert.ToDouble(C));if(B=="-")D=Convert.ToString(Convert.ToDouble(A)-Convert.ToDouble(C));if(B=="*")D=Convert.ToString(Convert.ToDouble(A)*Convert.ToDouble(C));if(O=="/")D=Convert.ToString(Convert.ToDouble(A)/Convert.ToDouble(C));Console.WriteLine("结果是:"+D);}}

THE END
1.问道强化宠物专用计算器问道强化宠物专用计算器评分: 问道强化宠物专用计算器,有三个功能,算所需副宠,算强化的次数,算强化后的总成长。DOS 问道,计算器2011-11-04 上传大小:568KB 所需:33积分/C币 迅维专用电子电路计算器 迅维网的专用电子电路计算器,维修中的好帮手。 https://www.iteye.com/resource/gaokao110110-3755251
2.神武下载神武合集下载神武宠物资质成长计算器 中文 更新时间:2017-03-23 神武成长计算器是一款超好用的帮助神武玩家计算自己宠物具体成长值,让你对宠物的成长属性一目了然。有需要的朋友可以来绿色资源网下载体验! 宠物成长介绍成长的颜色最好到最差是红紫橙蓝绿红色最好,绿色最差! 首先我们红心成长走很多不同,比如一个红心 点击...http://www.downcc.com/p/h1_K4344.html
3.问道天书等级怎么降低游戏问答3.对话王掌柜-对话客栈旁的乞丐-查看告示-回去对话乞丐【紧锁的客栈】https://www.9game.cn/wenda/437031.html
4.问道手游宠物加点模拟器职业加点模拟器问道宠物模拟加点计算器 ·近日官方修改了游戏中宠物的物理伤害显示,几乎为之前数据的两倍,但是据玩家反映和实际伤害差距很大,在这里我们的计算结果仍是未改版前的宠物数据。 ·该版本不能用于预测野生宠物 ·敏血指数为判断召唤兽在敏血加点下综合能力的参考标准,计算方式为: ...https://m.18183.com/wdsyb/201512/486922.html
5.ND滤镜曝光时间计算器App:withNDNDAPP相机数码摄影师在白天拍摄长时间曝光作品时一般都需要用到ND滤镜,以降低场景亮度。但很多时候由于经验不足或其他原因,最后得到的照片曝光量往往不准确。 日本B-SHIKI Fld公司针对这一问题推出了一款名为“with ND”的ND滤镜曝光时间计算器App。用户只需在APP上输入机身测光提供的感光度和快门速度参数,再选择ND滤镜型号(最多...https://tech.sina.com.cn/digi/dc/2013-01-14/09027975596.shtml
6.什么是真正的驯养小王子虽然有点可怜酒鬼,但还是离开了他,来到了第四个小行星,在这里遇到了一个每天都在敲打计算器的商人,他没日没夜地计算着他购买来的星星,他自豪地把自己的事情称为是“正经事”。 小王子问商人,为什么要这么多的星星?商人说:“什么也不做,就是想要占有它。”商人是小王子唯一教训的人,他对商人说:“我拥...https://www.jianshu.com/p/d42bbcf92162
1.问道强化宠物专用计算器资源问道强化宠物专用计算器,有三个功能,算所需副宠,算强化的次数,算强化后的总成长。DOS 带界面的计算器 浏览:8 数据结构课程设计计算器,带界面,具有报错功能,可以进行加减乘除括号混合运算,与或非逻辑运算。开发环境vs2017。上传为整个计算器设计工程,可以用vs2017打开。 https://download.csdn.net/detail/gaokao110110/3755251
2.Steam上的FaceFun宠物连连看,王牌战争文明重启,古今江湖,流言侦探,超级兔子,没腿玩个锤子,动物模拟器,行走大师,fifa online 4,牧羊人之心,dota自走棋,像棋,方块消除,疯狂赛车,荒野大嫖客,叶罗丽,奥奇传说,FR传奇,战盟,自走起,仙剑情缘,食物,炸金花真人版,帕斯卡契约,星星,竞技游戏,gta5手机版,少年歌行,刺杀国王,爆走大侠,斗...https://store.steampowered.com/app/939920/FaceFun
3.电脑史话(说历史视频)腾讯云开发者社区帕斯卡发明成功后,一连制作了50台这种被人称为“帕斯卡加法器”的计算机,至少现在还有5台保存着。比如...巴贝奇耗费了整整十年光阴,于1822年完成了第一台差分机,它可以处理3个不同的5位数,计算精度达到6位小数https://cloud.tencent.com/developer/article/2062838
4.成长的足迹作文(精选63篇)成长啊,你像一个地震监测器,记录着一切的痕迹,并且时时更新!成长啊,你像大树的一圈圈年轮,记录着我所经历的风雨!成长啊,你像一个计算器,只要一归零,一切都消失了! 成长的足迹难以忘怀。 成长的足迹作文 篇43 旋转着青春的舞步,我们来到了这个如花的季节。时光飞逝。昨天,我们依偎在父母身边。今天,我们张开翅膀,...https://www.ruiwen.com/zuowen/chengzhang/857235.html
5.等额本息还款是什么意思?等额本金计算器你会使用吗等额本金计算器你会使用吗 [摘要]如果已经购买了房子,正在办理贷款的朋友去到银行窗口办理的时候,一定会有工作人员问道购房者朋友们选择哪种还款方式,如果之前没有了解过还款方式的朋友们肯定会语塞,不知道应该怎么回答,其实还款方式有两种,那么等额本息还款是什么意思?https://zhishi.fang.com/xf/qg_516988.html
6.问道手游搬砖教程(问道刷星器)导读大家好,笑笑来为大家解答以上的问题。问道手游搬砖教程,问道刷星器这个很多人还不知道,现在让我们一起来看看吧!1、问道刷星计算器现在怎 大家好,笑笑来为大家解答以上的问题。问道手游搬砖教程,问道刷星器这个很多人还不知道,现在让我们一起来看看吧! https://build.0551fangchan.com/news/2022-07-31/07361225.html
7.预产期计算器查询预产期计算器查询专题Q:哪位宝妈知道体质指数计算器? 体质指数计算器能够根据个人的身高以及体重,计算出健康的标准,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。BMI值超标,意味着你必须减肥了。BMI简单、实用、可反映全身性超重和肥胖。在测量身体因超重而面临心脏病、高血压等风险时,比单纯的以体重来认定,更具准确性。https://www.daojia.com/jh_ycqjsqcx/
8.关于数学的趣味小故事(通用70篇)我们身体真的很奇妙,手是一个常见的计算器。最常见的手的计算是9的倍数计算。家长可能不理解,但是很多小孩子很快就能学会。计算9的.倍数时,将手放在膝盖上,像下表中所示,从左到右给你的手指编号。现在选择你想计算的9的倍数,假设这个乘式是7×9。只要像上图所示那样,弯曲标有数字7的手指。然后数弯曲的那根...https://www.yuwenmi.com/lizhi/xiaogushi/373927.html