直白的理解State模式

  • 1直白的理解State模式,直接撸代码

这里的业务就是根据订单的来源不同,来计算订单的配送运费。
这里用State模式来做,一种 自己官网的普通订单State,一种 三方合作的订单State,做两个State类

    /// <summary>
    /// 普通订单
    /// </summary>
    public class GeneralOrder : Order
    {
        /// <summary>
        /// 计算订单的价钱
        /// </summary>
        public override void ComputePrice()
        {
            //nothing to do
        }
    }
    /// <summary>
    /// 三方订单
    /// </summary>
    public class CooperantOrder : Order
    {
        /// <summary>
        /// 计算订单价钱
        /// </summary>
        /// <returns></returns>
        public override void ComputePrice()
        {
            if (orderPrice > 99)
            {
                deliveryCost = 0;
            }
            else
            {
                deliveryCost = OrderDeliveryCost;
                orderPrice += OrderDeliveryCost;
            }
        }
    }
    /// <summary>
    /// 订单
    /// </summary>
    public abstract class Order
    {
        protected readonly decimal OrderPriceFreeDeliveryCost = 99;
        protected readonly decimal OrderDeliveryCost = 5;
        protected IExpress express;
        protected decimal deliveryCost;
        protected decimal orderPrice;
        public decimal OrderPrice { get { return orderPrice; } }
        /// <summary>
        /// 运费
        /// </summary>
        public  decimal DeliveryCost
        {
            get { return deliveryCost; }
        }
        public Order(IExpress express)
        {
            this.express = express;
        }
        public abstract void ComputePrice();

        /// <summary>
        /// 设定快递派送
        /// </summary>
        /// <returns>设定结果</returns>
        public virtual bool SetDeliveryWay()
        {
           var handlerResult= express.HandlerCustomerOrder(this);
           if (!handlerResult)
               throw new Exception("订单没有快递公司进行配送了");
           else
               this.ComputePrice();
           return handlerResult;
        }
    }
    /// <summary>
    /// 快递公司
    /// </summary>
    public interface IExpress
    {
        bool HandlerCustomerOrder(Order order);      
    }

总结:

State模式就是用State类来替换 if ……lese ……的操作,因为类中直接调用方法了,不会存在if……else……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值