我的理解:状态模式类似于策略模式([设计模式] 23.Strategy 策略模式),将状态的变化抽象出来(状态的抽象类)。
不同的状态继承这个状态抽象类。并实现该状态下方法的变动。
与策略模式不同的是,抽象类中一般还维护着各状态的变动。下面举例:
public class Elevator
{
ElevatorState _elevatorState;
public Elevator()
{
_elevatorState = new ElevatorStop();//默认为停止状态
}
public void Run()
{
_elevatorState.Display();
_elevatorState = _elevatorState.NextState;
}
}

//电梯的状态抽象
public abstract class ElevatorState
{
protected abstract void Display();//电梯展示灯在各状态中要显示的内容
protected abstract ElevatorState NextState{get;}//电梯在这个状态后应该转变为什么状态
}
//电梯运行状态
public class ElevatorRun : ElevatorState
{
public override void Display()
{
Console.WriteLine("电梯运行中
");
}
public override ElevatorState NextState
{
get { return new ElevatorStop(); }
}
}
//电梯停止状态
public class ElevatorStop : ElevatorState
{
public override void Display()
{
Console.WriteLine("电梯已停止.");
}
public override ElevatorState NextState
{
get { return new ElevatorRun(); }
}
}

浙公网安备 33010602011771号