通过简单工厂模式 更加熟悉面向对象编程。对面向工程编程有了一定的认识。
简单工厂模式 通俗点讲就是 通过一个单独的类来构造实例对象的过程 就是工厂
通过小菜鸟和大鸟之间的对话 熟悉了学习了简单工厂模式 计算器版本的更新
第一版计算器 也是我会写出来的计算器 我的思路 面向过程编程
Console.WriteLine("请输入第一个数"); string OneStr = Console.ReadLine(); decimal OneNumber = Convert.ToDecimal(OneStr); Console.WriteLine("请输入第二个数"); string TwoStr = Console.ReadLine(); decimal TwoNumber = Convert.ToDecimal(TwoStr); Console.WriteLine("请输入运算符"); string Operate = Console.ReadLine(); decimal Resualt = 0; switch (Operate) { case "+": Resualt = OneNumber + TwoNumber; break; case "*": Resualt = OneNumber * TwoNumber; break; case "-": Resualt = OneNumber - TwoNumber; break; case "/": if (TwoNumber == 0) { Console.WriteLine("除数不能为零!"); } else { Resualt = OneNumber / TwoNumber; } break; }
第二版计算器 面向对象编程(业务和逻辑分离) 封装
Resualt = OperateProvider.Calculation(OneNumber ,TwoNumber ,Operate);
CalculateProvider calcalte = OperateFactory.CreateOperate(Operate); calcalte.NumberA = OneNumber; calcalte.NumberB = TwoNumber; Resualt = calcalte.GetResualt(); /// <summary> /// 计算基类 /// </summary> public class CalculateProvider { private decimal _numberA = 0; private decimal _numberB = 0; public decimal NumberA { get { return _numberA; } set { _numberA = value; } } public decimal NumberB { get { return _numberB; } set { _numberB = value; } } /// <summary> /// 虚方法 实现类 /// </summary> /// <returns></returns> public virtual decimal GetResualt() { decimal resualt = 0; return resualt; } } /// <summary> /// 简单工厂模式 工厂如何实例化出合适的对象 /// </summary> public class OperateFactory { public static CalculateProvider CreateOperate(string Operate) { CalculateProvider calcuate = null; switch (Operate) { case "+": calcuate = new AddProvider(); break; case "-": calcuate = new SubtractProcider(); break; } return calcuate; } }
第三版计算器 面向对象继承 简单工厂模式
CalculateProvider calcalte = OperateFactory.CreateOperate(Operate); calcalte.NumberA = OneNumber; calcalte.NumberB = TwoNumber; Resualt = calcalte.GetResualt(); /// <summary> /// 简单工厂模式 工厂如何实例化出合适的对象 /// </summary> public class OperateFactory { public static CalculateProvider CreateOperate(string Operate) { CalculateProvider calcuate = null; switch (Operate) { case "+": calcuate = new AddProvider(); break; case "-": calcuate = new SubtractProcider(); break; } return calcuate; } } /// <summary> /// 计算基类 /// </summary> public class CalculateProvider { private decimal _numberA = 0; private decimal _numberB = 0; public decimal NumberA { get { return _numberA; } set { _numberA = value; } } public decimal NumberB { get { return _numberB; } set { _numberB = value; } } /// <summary> /// 虚方法 实现类 /// </summary> /// <returns></returns> public virtual decimal GetResualt() { decimal resualt = 0; return resualt; } }