前言:状态模式用于解决多个情况下使用多个if else语句让代码显得比较乱的问题,状态模式有环境类,可以控制状态的切换以及不同状态方法的调用;抽象状态类申明不同状态类需要执行的相似的方法,还有不同的具体状态类,如下:
class Contex
{
public State _State, _state1, _state2;
public Contex()
{
_state1 = new State1();
_state2 = new State2();
_State = _state1;//设置初始状态
}
private void SetState(State state)
{
this._State = state;
}
public void Action()//实现状态切换以及不同状态方法执行
{
if(this._State == _state1)
{
this._State.Handle();
this.SetState(_state2);
}
else if(this._State == _state2)
{
this._State.Handle();
this.SetState(_state1);
}
}
}
public abstract class State//抽象状态类
{
public abstract void Handle();
}
class State1:State//状态类1
{
public override void Handle()
{
Console.WriteLine("我是状态1");
}
}
class State2 : State//状态类2
{
public override void Handle()
{
Console.WriteLine("我是状态2");
}
}
调用:
Contex contex = new Contex();
contex.Action();
contex.Action();
输出:
我是状态1
我是状态2