zoukankan      html  css  js  c++  java
  • 状态模式重构条件语句

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

    /// <summary>
    /// 状态模式的环境类
    /// </summary>
    public class CalculateContext
    {
        private IShippingAmount _Calculate;
        public CalculateContext() => _Calculate = new GetAlaskaShippingAmount();
    
        public void SetAddress(IShippingAmount calculate) => _Calculate = calculate;
        public decimal CalculateAmount() => _Calculate.GetAmount();
    }
    
    // 抽象
    public interface IShippingAmount
    {
        AddressState State { get; }
        decimal GetAmount();
    }
    
    #region 具体地址的实现
    // 具体
    public class GetAlaskaShippingAmount : IShippingAmount
    {
        public AddressState State { get => AddressState.Alaska; }
        public decimal GetAmount() => 15;
    }
    
    public class GetNewYorkShippingAmount : IShippingAmount
    {
        public AddressState State { get => AddressState.NewYork; }
        public decimal GetAmount() => 10;
    }
    
    public class GetFloridaShippingAmount : IShippingAmount
    {
        public AddressState State { get => AddressState.Florida; }
        public decimal GetAmount() => 3;
    }
    #endregion
    

    客户端调用:

    #region 状态模式重构switch...case...
    static void SwitchToStateDP()
    {
        var ctx = new CalculateContext();
        ctx.CalculateAmount();
    
        ctx.SetAddress(new GetFloridaShippingAmount());
        ctx.CalculateAmount();
    }
    #endregion
    

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

  • 相关阅读:
    C++Primer 中间Sales_items.h头文件
    2014最不受欢迎10编程语言种
    解决ubuntu 14.04删ibus导致系统设置项目的损失后,,退出关机问题是不正常的
    会计翻译成英文
    Delphi 使用 Format格式话字符串的用法
    浅谈暂估应付账款的会计处理
    Delphi TcxTreelist 设置scrollbars 不起作用的原因
    Delphi 调试 通过BreakPoint
    折现率”的公式
    考会计证 需要的科目
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/11142773.html
Copyright © 2011-2022 走看看