C#用状态模式实现简单工作流
一:什么是状态模式
描述:在该模式中,类的行为基于他的状态改变。这种类型的设计模式属于行为型设计模式。在状态模式中我们创建表示各种状态的对象和一个随着状态改变而改变的上下文。
意图:允许对象在内部状态改变时改变他的行为,这个对象本身看起来好像修改了他的类。
主要解决:对象的行为依赖于他的状态,并且可以根据他状态的改变而改变他的行为。
何时使用:在代码中包含大量对象状态有关的条件语句
解决方案:将各种具体的状态抽象出来
二:c#类图
三:代码实现
3.1:共用抽象类
这里主要定义了一个int类型的sateId用来判断它的当前状态,还有一个Do的共用方法,在该方法中Sate的子类可以实现它特有的业务逻辑
public abstract class State
{
public abstract int StateId {
get; }
public abstract void Do(Work work, Func<int, bool> func);
}
3.2:OrderSate类
在该类中我们为它的状态id赋值为1,在判断状态机并没有结束的前提下判断传入的委托是否是该状态机的状态编号之后再进行业务逻辑的处理,之后再为状态机设置下一个Sate,并同样将委托传入下一个sate的Do方法中,如果状态机是结束状态就直接执行finishSate中的Do方法。
public class OrderState : State
{
public override int StateId => 1;
public override void Do(Work work, Func<int, bool> func)
{
// 判断状态机是否处于结束状态
if(!work.Finish)
{