不一样的状态模式(设计模式十七)
前言
什么是状态模式呢?其实这个东西和策略和命令都很像,可以说其实他们是一种思想的不同表达形式。
先贴一下:
在状态模式(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);
}