本程序分为三个部分:业务逻辑,页面逻辑,生产对象的工厂
一、业务逻辑:
1.Operation类
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceSimpleFactory.Caculation_bll7{8///<summary>9///所有具体策略类的父类10///</summary>11publicclassOperation12{13PRivatedoublenumberA;1415publicdoubleNumberA16{17get{returnnumberA; }18set{ numberA =value; }19}2021privatedoublenumberB;2223publicdoubleNumberB24{25get{returnnumberB; }26set{ numberB =value; }27}2829//所有具体策略类的共同方法30publicvirtualdoubleGetResult()31{32doubleresult =0;33returnresult;34}35}36}
2. AddOperation类
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceSimpleFactory.Caculation_bll7{8///<summary>9///加法运算的具体实现类10///</summary>11classAddOperation:Operation12{13///<summary>14///加法运算的具体实现15///</summary>16///<returns>加法运算结果</returns>17publicoverridedoubleGetResult()18{19returnNumberA +NumberB;20}21}22}
3. SubOperation类
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceSimpleFactory.Caculation_bll7{8///<summary>9///减法运算的具体实现类10///</summary>11classSubOperation:Operation12{13///<summary>14///减法运算的具体实现15///</summary>16///<returns>减法运算结果</returns>17publicoverridedoubleGetResult()18{19returnNumberA -NumberB;20}21}22}
4. MulOperation类
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceSimpleFactory.Caculation_bll7{8///<summary>9///乘法运算的具体实现类10///</summary>11classMulOperation:Operation12{13///<summary>14///乘法运算的具体实现15///</summary>16///<returns>乘法运算结果</returns>17publicoverridedoubleGetResult()18{19returnNumberA *NumberB;20}21}22}
5. DivOperation类
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSimpleFactory.Caculation_ui;67namespaceSimpleFactory.Caculation_bll8{9///<summary>10///除法运算的具体实现类11///</summary>12classDivOperation : Operation13{14///<summary>15///除法运算的具体实现16///</summary>17///<returns>除法运算结果</returns>18publicoverridedoubleGetResult()19{20//排除除数为0的情况21if(NumberB==0)22{23return0;24}2526returnNumberA /NumberB;27}28}29}
二、页面逻辑
1. AchieveDouble类
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceSimpleFactory.Caculation_ui7{8///<summary>9///获取参与运算的数字10///</summary>11publicclassAchieveDouble12{13//用于计获取了多少个数字14privatestaticintcount =0;1516///<summary>17///获取参与运算的数字18///</summary>19///<returns>参与运算的数字</returns>20publicstaticdoubleGetFromConsoleAchieveDouble()21{22doublenumber;23Console.WriteLine("请输入第{0}个数字:",count+1);24do25{26doubletemp;//中间变量27try28{29temp =Convert.ToDouble(Console.ReadLine());30}31catch(Exception)32{33Console.WriteLine("请刚刚输入有误,请重新输入第{0}个数字:",count+1);34continue;35}3637number =temp;38
break;3940}while(true);41count++;42returnnumber;43}44}45}
2. AchieveOperator类
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceSimpleFactory.Caculation_ui7{8///<summary>9///获取运算符10///</summary>11classAchieveOperator12{13publicstaticstringGetFromConsoleOperator()14{15stringoper;16Console.WriteLine("请输入运算字符:");17do18{19stringtemp =Console.ReadLine();20if(temp !="+"&& temp !="-"&& temp !="*"&& temp !="/")21{22Console.WriteLine("你刚刚输入有误,请重新输入运算字符:");23continue;24}2526oper =temp;27}while(true);28returnoper;29}30}31}
3. Caculation类
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSimpleFactory.Caculation_bll;6usingSimpleFactory.Caculation_factory;78namespaceSimpleFactory.Caculation_ui9{10classCaculation11{12staticvoidMain(string[] args)13{14doublenumberA = AchieveDouble.GetFromConsoleAchieveDouble();//获取第一个数字15doublenumberB = AchieveDouble.GetFromConsoleAchieveDouble();//获取第二个数字16stringoper = AchieveOperator.GetFromConsoleOperator();//获取运算符1718Operation operation =Factory.GetInstance(oper);19operation.NumberA =numberA;20operation.NumberB =numberB;21doubleresult =operation.GetResult();2223Console.WriteLine("{0} {1} {2} = {3}",numberA,oper,numberB,result);24}25}26}
三、生成对象的工厂
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSimpleFactory.Caculation_bll;67namespaceSimpleFactory.Caculation_factory8{9///<summary>10///生成对象的工厂11///</summary>12publicclassFactory13{14///<summary>15///生成对象的工厂16///</summary>17///<param name="oper">传输的运算符号</param>18///<returns>参与运算的对象</returns>19publicstaticOperation GetInstance(stringoper)20{21Operation operation =null;22switch(oper)23{24case"+":25operation =newAddOperation();//实例加法对象26
break;27case"-":28operation =newSubOperation();//实例减法对象29
break;30case"*":31operation =newMulOperation();//实例乘法对象32
break;33case"/":34operation =newDivOperation();//实例除法对象35
break;36}37returnoperation;38}39}40}