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(对应状态模式中的内部状态改变)来调整客户的选择(也就是条件)。

  • 相关阅读:
    Linux mysql 远程访问
    Linux下高并发socket最大连接数所受的各种限制
    Linux之gunzip命令
    不停在终端中报log
    FIO测试
    yum是什么?(linux命令)
    ubuntu grub 登录
    百度网盘命令行方式,解决ubuntu16.04百度网盘无法运行的问题
    excel使用经验汇总
    ubuntu 安装 ipfs 经验
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/11142773.html
Copyright © 2011-2022 走看看