花了两个小时搞了个计算器.(反射工厂)

来源:互联网 发布:java.util.arrays 编辑:程序博客网 时间:2024/04/30 13:23
class Program    {        static void Main(string[] args)        {            while (true)            {                Console.WriteLine("请输入数字a");                double num1 = GetInputNum();                Console.WriteLine("请输入运算符号");                string sign = Console.ReadLine();                while (string.IsNullOrWhiteSpace(sign))                {                    Console.WriteLine("请输入正确的运算符号");                    sign = Console.ReadLine();                }                Console.WriteLine("请输入数字b");                double num2 = GetInputNum();                ICanCalculate calc = CalculateFactory.CreateCalc(sign);                if (calc == null)                {                    Console.WriteLine("无法实例化算法对象,请检查配置文件");                }                else                {                    double result = calc.Calculate(num1, num2);                    Console.WriteLine("{0} {1} {2} = {3}",num1,sign,num2,result);                }            }        }        static double GetInputNum()        {            while (true)            {                string input = Console.ReadLine();                double result;                if (double.TryParse(input, out result))                {                    return result;                }                else                {                    Console.WriteLine("您的输入有误,请重新输入");                }            }        }    }    public class CalculateFactory    {        public static ICanCalculate CreateCalc(string sign)        {            string typeName = ConfigurationManager.AppSettings[sign];            if (string.IsNullOrWhiteSpace(typeName))            {                throw new ArgumentException("参数无效", "sign");            }            else            {                Assembly assembly = Assembly.LoadFrom("ConsoleApplication2.exe");//程序集名称                return assembly.CreateInstance(typeName) as ICanCalculate;                            }        }    }    public interface ICanCalculate    {        double Calculate(double num1, double num2);                            }    public class AddCalc : ICanCalculate    {        public double Calculate(double num1, double num2)        {            return num1 + num2;        }    }    
在工厂里面可实现自定义配置文件
想了一下,修改了一下接口
  public interface ICanCalculate    {        bool CheckInput(double num1, double num2);                                double Calculate(double num1, double num2);                            }    public class AddCalc : ICanCalculate    {        public double Calculate(double num1, double num2)        {            return num1 + num2;        }        public bool CheckInput(double num1, double num2)        {            return true;        }    }    


 
原创粉丝点击