从父类派生出多个子类时,使用一个单独的类来做创造实例的过程,这就是工厂。
每种计算都是获取数,返回结果的过程,故而可以将每种计算单独封装为一个类,并继承父类Operation。在父类中声明一个虚方法GetResult,每种计算子类都要重写父类该方法以进行自己的计算。
父类:计算类
public class Operation{ //两数的属性、获得结果虚方法 public double NumbleA { get; set; } public double NumbleB { get; set; } public virtual double GetResult() => default(double); }
派生的子类:加减乘除类
class OperationAdd : Operation{ public override double GetResult() => NumbleA + NumbleB; } class OperationSub : Operation{ public override double GetResult() => NumbleA - NumbleB; } class OperationMul : Operation{ public override double GetResult() => NumbleA * NumbleB; } class OperationDiv : Operation{ public override double GetResult(){ if (NumbleB == 0) throw new Exception("除数不能为0"); return NumbleA / NumbleB; } }
工厂类:计算工厂类
class OperationFactory{ //根据输入的运算符进行判断生成哪种子类的静态方法 public static Operation CreateOperate(string operate){ Operation oper = null; switch (operate){ case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "*": oper = new OperationMul(); break; case "/": oper = new OperationDiv(); break; } return oper; } }
测试类:程序类
class Program{ static void Main(string[] args){ Console.WriteLine("请输入一个数:"); double n1=Convert.ToDouble(Console.ReadLine()); Console.WriteLine("请输入运算符:"); var of=OperationFactory.CreateOperate(Console.ReadLine()); Console.WriteLine("请输入一个数"); double n2 = Convert.ToDouble(Console.ReadLine()); of.NumbleA = n1; of.NumbleB = n2; Console.WriteLine($"运算结果为:{of.GetResult()}"); Console.ReadKey(); } }
原文:https://www.cnblogs.com/errornull/p/10012252.html