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

状态模式重构条件语句
直接上代码:

  1. /// <summary>
  2. /// 状态模式的环境类
  3. /// </summary>
  4. public class CalculateContext
  5. {
  6. private IShippingAmount _Calculate;
  7. public CalculateContext() => _Calculate = new GetAlaskaShippingAmount();
  8. public void SetAddress(IShippingAmount calculate) => _Calculate = calculate;
  9. public decimal CalculateAmount() => _Calculate.GetAmount();
  10. }
  11. // 抽象
  12. public interface IShippingAmount
  13. {
  14. AddressState State { get; }
  15. decimal GetAmount();
  16. }
  17. #region 具体地址的实现
  18. // 具体
  19. public class GetAlaskaShippingAmount : IShippingAmount
  20. {
  21. public AddressState State { get => AddressState.Alaska; }
  22. public decimal GetAmount() => 15;
  23. }
  24. public class GetNewYorkShippingAmount : IShippingAmount
  25. {
  26. public AddressState State { get => AddressState.NewYork; }
  27. public decimal GetAmount() => 10;
  28. }
  29. public class GetFloridaShippingAmount : IShippingAmount
  30. {
  31. public AddressState State { get => AddressState.Florida; }
  32. public decimal GetAmount() => 3;
  33. }
  34. #endregion

客户端调用:

  1. #region 状态模式重构switch...case...
  2. static void SwitchToStateDP()
  3. {
  4. var ctx = new CalculateContext();
  5. ctx.CalculateAmount();
  6. ctx.SetAddress(new GetFloridaShippingAmount());
  7. ctx.CalculateAmount();
  8. }
  9. #endregion

状态模式:当一个对象的内部状态改变时允许改变它的行为。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
客户端通过SetAddress(对应状态模式中的内部状态改变)来调整客户的选择(也就是条件)。

原文链接:http://www.cnblogs.com/zhiyong-ITNote/p/11142773.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号