我的处女作——设计模式之状态模式( 二 )


te(待提交状态)类
继承类,待提交状态可以变成待审核状态,所以重写(待审核)方法
(待审核状态)类
继承类,待审核状态可以变成审核通过、审核不通过,所以重写(审核通过)和(审核不通过)方法
【我的处女作——设计模式之状态模式】(审核通过状态)类和(审核不通过状态)类
继承类,由于审核通过和审核不通过状态已经结束,所以不重写任何方法
(订单状态枚举)类
这里我重点说明一下 枚举状态的名字和类名去掉State后缀一样,保持这个规则,方便用反射实现订单状态的变更
以下是源代码

.Logic.Order.
class

我的处女作——设计模式之状态模式

文章插图
/// /// 用户Id/// public long UserId { get; set; }/// /// 订单id/// public int OrderId { get; set; }/// /// 订单父类/// public OrderState _orderState { get; set; }public OrderStateHelper(long userId, string orderId, int state){UserId = userId;OrderId = orderId;SetState(state);}#region 设置当前订单状态类(实例化子类)/// /// 设置当前订单状态/// /// 当前订单状态值public void SetState(int value){//设置当前枚举值_enumValue = http://www.kingceram.com/post/EnumHelper.GetInstance(value);#region 通过命名空间+类名 实例化具体的子类string adaptorName = this.GetType().Namespace + "." + _enumValue+ "State";var adaptorType = Type.GetType(adaptorName);if (adaptorType != null){_orderState = Activator.CreateInstance(Type.GetType(adaptorName), null) as OrderState;}#endregion}#endregion#region 改变订单状态为其他状态/// /// 改变订单状态为其他状态/// /// 新的订单状态值public bool ChangState(int value){//设置当前枚举值_enumValue = http://www.kingceram.com/post/EnumHelper.GetInstance(value);#region 通过反射方法名字符串动态调用方法Type type = _orderState.GetType();var method = type.GetMethod(_enumValue.ToString());return (bool)method.Invoke(_orderState, new object[] { this });#endregion}#endregion
}
}

下面是需要注意的一些规则:
我的处女作——设计模式之状态模式

文章插图

我的处女作——设计模式之状态模式

文章插图
类:
所有状态类的父类,下面更新状态用虚方法的好处时,子类根据需要去重写更新状态的方法,这样防止恶意随便更改状态
namespace Solution.Logic.Order.OrderState{public abstract class OrderState{#region 更新状态/// /// 更新订单状态/// /// 订单状态操作类/// 要更新的订单状态protected virtual bool UpdateState(OrderStateHelper helper, OrderStateEnum orderStateEnum){bool result = false;result = new OrderInfoBll().UpdateValue(helper.OrderId, OrderInfoTable.Status);return result;}#endregion#region 虚函数#region 货主/// /// 待提交/// /// 订单状态操作类public virtual bool PendingSubmission(OrderStateHelper helper){return false;}/// /// 待审核/// /// 订单状态操作类public virtual bool PendingAudit(OrderStateHelper helper){return false;}/// /// 审核未通过/// /// 订单状态操作类public virtual bool AuditNotPass(OrderStateHelper helper){return false;}/// /// 审核通过/// /// 订单状态操作类public virtual bool AuditNotPass(OrderStateHelper helper) { return false; }
te(待提交状态)类
继承类,待提交可以变成待审核状态,所以重写待审核状态的方法
namespace Solution.Logic.Order.OrderState{/// /// 待提交状态类/// public class PendingSubmissionState:OrderState{/// /// 待提交可以变成待审核状态,所以重写待审核方法/// ///