本程序分為三個部分:業務邏輯,頁面邏輯,生產對象的工廠
一、業務邏輯:
1. Operation類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace SimpleFactory.Caculation_bll 7 { 8 /// <summary> 9 /// 所有具體策略類的父類 10 /// </summary> 11 public class Operation 12 { 13 private double numberA; 14 15 public double NumberA 16 { 17 get { return numberA; } 18 set { numberA = value; } 19 } 20 21 private double numberB; 22 23 public double NumberB 24 { 25 get { return numberB; } 26 set { numberB = value; } 27 } 28 29 //所有具體策略類的共同方法 30 public virtual double GetResult() 31 { 32 double result = 0; 33 return result; 34 } 35 } 36 }
2. AddOperation類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace SimpleFactory.Caculation_bll 7 { 8 /// <summary> 9 /// 加法運算的具體實現類 10 /// </summary> 11 class AddOperation:Operation 12 { 13 /// <summary> 14 /// 加法運算的具體實現 15 /// </summary> 16 /// <returns>加法運算結果</returns> 17 public override double GetResult() 18 { 19 return NumberA + NumberB; 20 } 21 } 22 }
3. SubOperation類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace SimpleFactory.Caculation_bll 7 { 8 /// <summary> 9 /// 減法運算的具體實現類 10 /// </summary> 11 class SubOperation:Operation 12 { 13 /// <summary> 14 /// 減法運算的具體實現 15 /// </summary> 16 /// <returns>減法運算結果</returns> 17 public override double GetResult() 18 { 19 return NumberA - NumberB; 20 } 21 } 22 }
4. MulOperation類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace SimpleFactory.Caculation_bll 7 { 8 /// <summary> 9 /// 乘法運算的具體實現類 10 /// </summary> 11 class MulOperation:Operation 12 { 13 /// <summary> 14 /// 乘法運算的具體實現 15 /// </summary> 16 /// <returns>乘法運算結果</returns> 17 public override double GetResult() 18 { 19 return NumberA * NumberB; 20 } 21 } 22 }
5. DivOperation類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using SimpleFactory.Caculation_ui; 6 7 namespace SimpleFactory.Caculation_bll 8 { 9 /// <summary> 10 /// 除法運算的具體實現類 11 /// </summary> 12 class DivOperation : Operation 13 { 14 /// <summary> 15 /// 除法運算的具體實現 16 /// </summary> 17 /// <returns>除法運算結果</returns> 18 public override double GetResult() 19 { 20 //排除除數為0的情況 21 if (NumberB==0) 22 { 23 return 0; 24 } 25 26 return NumberA / NumberB; 27 } 28 } 29 }
二、頁面邏輯
1. AchieveDouble類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace SimpleFactory.Caculation_ui 7 { 8 /// <summary> 9 /// 獲取參與運算的數字 10 /// </summary> 11 public class AchieveDouble 12 { 13 //用於計獲取了多少個數字 14 private static int count = 0; 15 16 /// <summary> 17 /// 獲取參與運算的數字 18 /// </summary> 19 /// <returns>參與運算的數字</returns> 20 public static double GetFromConsoleAchieveDouble() 21 { 22 double number; 23 Console.WriteLine("請輸入第{0}個數字:",count+1); 24 do 25 { 26 double temp; //中間變量 27 try 28 { 29 temp = Convert.ToDouble(Console.ReadLine()); 30 } 31 catch (Exception) 32 { 33 Console.WriteLine("請剛剛輸入有誤,請重新輸入第{0}個數字:",count+1); 34 continue; 35 } 36 37 number = temp; 38 break; 39 40 } while (true); 41 count++; 42 return number; 43 } 44 } 45 }
2. AchieveOperator類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace SimpleFactory.Caculation_ui 7 { 8 /// <summary> 9 /// 獲取運算符 10 /// </summary> 11 class AchieveOperator 12 { 13 public static string GetFromConsoleOperator() 14 { 15 string oper; 16 Console.WriteLine("請輸入運算字符:"); 17 do 18 { 19 string temp = Console.ReadLine(); 20 if (temp != "+" && temp != "-" && temp != "*" && temp != "/") 21 { 22 Console.WriteLine("你剛剛輸入有誤,請重新輸入運算字符:"); 23 continue; 24 } 25 26 oper = temp; 27 } while (true); 28 return oper; 29 } 30 } 31 }
3. Caculation類
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using SimpleFactory.Caculation_bll; 6 using SimpleFactory.Caculation_factory; 7 8 namespace SimpleFactory.Caculation_ui 9 { 10 class Caculation 11 { 12 static void Main(string[] args) 13 { 14 double numberA = AchieveDouble.GetFromConsoleAchieveDouble(); //獲取第一個數字 15 double numberB = AchieveDouble.GetFromConsoleAchieveDouble(); //獲取第二個數字 16 string oper = AchieveOperator.GetFromConsoleOperator(); //獲取運算符 17 18 Operation operation = Factory.GetInstance(oper); 19 operation.NumberA = numberA; 20 operation.NumberB = numberB; 21 double result = operation.GetResult(); 22 23 Console.WriteLine("{0} {1} {2} = {3}",numberA,oper,numberB,result); 24 } 25 } 26 }
三、生成對象的工廠
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using SimpleFactory.Caculation_bll; 6 7 namespace SimpleFactory.Caculation_factory 8 { 9 /// <summary> 10 /// 生成對象的工廠 11 /// </summary> 12 public class Factory 13 { 14 /// <summary> 15 /// 生成對象的工廠 16 /// </summary> 17 /// <param name="oper">傳輸的運算符號</param> 18 /// <returns>參與運算的對象</returns> 19 public static Operation GetInstance(string oper) 20 { 21 Operation operation = null; 22 switch (oper) 23 { 24 case "+": 25 operation = new AddOperation(); //實例加法對象 26 break; 27 case "-": 28 operation = new SubOperation(); //實例減法對象 29 break; 30 case "*": 31 operation = new MulOperation(); //實例乘法對象 32 break; 33 case "/": 34 operation = new DivOperation(); //實例除法對象 35 break; 36 } 37 return operation; 38 } 39 } 40 }