不一样的状态模式(设计模式十七)

前言

什么是状态模式呢?其实这个东西和策略和命令都很像,可以说其实他们是一种思想的不同表达形式。

先贴一下:
在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。

正文

public class context
{
   public string state="1";
   public void doAction(){
       if(state==1)
       {
         //启动
       }else if(state==2)
       {
         //停止
       }
       //...
  }
}

发现了问题就是很多if else 多一个状态又得改一次,也就是说context 不稳定。

那么就需要把state 抽离出去,和策略模式不同的是,抽离出去的不仅仅是state,而是整个action。

这其实就是有点像命令模式,命令模式解耦的是请求者,而状态模式解耦的是执行者。

public abstract class state
{
   public abstract void doAction(){
}
public class StopActionState:state{
    public Context context;
    public StopActionState(Context context)
    {
       this.context=context
    }
    public void doAction(){
        //...
        context.setState(this);
    }
}

public class StartActionState:state{
    public Context context;
    public StopActionState(Context context)
    {
       this.context=context
    }
    public void doAction(){
        //...
       context.setState(this);
    }
}
public class Context
{
   public State state;
   public Context()
   {
       
   }
   public void setState(State state)
   {
     this.state=state;
   }
   public State getState()
   {
      return state;
   }
}

public void main()
{
   Context context=new Context();
   //开启
   StartActionState startActionState=new StartActionState (context);
   //暂停
   StopActionState startActionState=new StopActionState (context);
}
posted @ 2020-09-09 18:02  敖毛毛  阅读(173)  评论(0编辑  收藏  举报