经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
多态重构条件语句
来源:cnblogs  作者:又见阿郎  时间:2019/7/8 8:52:21  对本文有异议

首先,在C#中,多态的体现是什么?虚函数、抽象方法、接口。废话不多说,直接上代码:

  1. #region 多态重构switch...case....
  2. public abstract class ShippingCalculation
  3. {
  4. public abstract decimal Calculate();
  5. }
  6. public class AlaskShippingCalculation : ShippingCalculation
  7. {
  8. public override decimal Calculate()
  9. {
  10. return 15m;
  11. }
  12. }
  13. public class NewYorkShippingCalculation : ShippingCalculation
  14. {
  15. public override decimal Calculate()
  16. {
  17. return 10m;
  18. }
  19. }
  20. public class FloridaShippingCalculation : ShippingCalculation
  21. {
  22. public override decimal Calculate()
  23. {
  24. return 3m;
  25. }
  26. }
  27. public class Context
  28. {
  29. public decimal ProcessCalculate(ShippingCalculation shippingCalculation)
  30. {
  31. return shippingCalculation.Calculate();
  32. }
  33. }
  34. #endregion

我们抽象出来基类,将其改造为抽象类和抽象方法,使其在子类中重写各自的逻辑,而后具体的选择(也就是条件语句)交给客户端来处理。

  1. static void SwitchToPolym()
  2. {
  3. var ctx = new Context();
  4. var price = ctx.ProcessCalculate(new FloridaShippingCalculation());
  5. Console.WriteLine($"{price}");
  6. }

就这么简单,细心的我们可以发现,这种多态的写法好像策略模式,没错!设计模式中绝大数的模式都是多态的应用罢了。

参考链接
31天重构学习笔记31. 使用多态代替条件判断
31天重构学习笔记11. 使用策略类
策略模式重构switch/case分支代码

原文链接:http://www.cnblogs.com/zhiyong-ITNote/p/11142750.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号