大話設計模式之1簡單工廠
阿新 • • 發佈:2018-11-12
用簡單工廠實現 控制檯跟窗體 簡易計 算器 程式碼如下
public class Operation { private double _numberA = 0; private double _numberB = 0; public double NumberA { get { return _numberA; } set { _numberA = value; } } public double NumberB { get { return _numberB; } set { _numberB = value; } } public virtual double GetResult() { double result = 0; return result; } /// <summary> /// 檢查輸入的字串是否準確 /// </summary> /// <param name="currentNumber"></param> /// <param name="inputString"></param> /// <returns></returns> public static string checkNumberInput(string currentNumber, string inputString) { string result = ""; if (inputString == ".") { if (currentNumber.IndexOf(".") < 0) { if (currentNumber.Length == 0) { result = "0" + inputString; } else { result = currentNumber + inputString; } } } else if (currentNumber == "0") { result = inputString; } else { result = currentNumber + inputString; } return result; } } /// <summary> /// 加法類 /// </summary> public class OperationAdd : Operation { public override double GetResult() { return NumberA + NumberB; } } /// <summary> /// 減法類 /// </summary> public class OperationSub : Operation { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } } /// <summary> /// 平方根類 /// </summary> public class OperationSqr : Operation { public override double GetResult() { return NumberA * NumberB; } } public class OperationSqrt : Operation { public override double GetResult() { if (NumberB < 0) { throw new Exception("負數不能平方根"); } double result = 0; result = Math.Sqrt(NumberB); return result; } } /// <summary> /// 相反類 /// </summary> public class OperationReverse : Operation { public override double GetResult() { return -NumberB; } } /// <summary> /// 乘法類 /// </summary> class OperationMul : Operation { public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; } } /// <summary> /// 除法類 /// </summary> class OperationDiv : Operation { public override double GetResult() { double result = 0; if (NumberB == 0) throw new Exception("除數不能為0。"); result = NumberA / NumberB; return result; } } /// <summary> /// 運算工廠 /// </summary> public class OperationFactory { public static Operation CreateOperation(string operate) { Operation operation = null; switch (operate) { case "+": operation = new OperationAdd(); break; case "-": operation = new OperationSub(); break; case "*": operation = new OperationMul(); break; case "/": operation = new OperationDiv(); break; case "sqr": operation = new OperationSqr(); break; case "sqrt": operation = new OperationSqrt(); break; case "+/-": operation = new OperationReverse(); break; } return operation; } }
完整程式碼 下載地址