直白的理解State模式

    xiaoxiao2021-03-25  98

    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……

    转载请注明原文地址: https://ju.6miu.com/read-34643.html

    最新回复(0)