1.意图:允许一个对对象改变自己状态时改变他的行为;对象看起来修改了自己的类;
2.适用性:1)一个对象的行为取决于他的状态,并且只有在运行时刻根据状态改变行为;2)一个操作中有庞大的条件分支,并且这些分支取决于他的状态;
State模式把这些分支放在一个独立的类中,这一对象不依赖于其他对象而发生改变;
Context:1)定义客户感兴趣的接口;2)维护一个ConcreteState的子类,定义当前的状态
public class Context
{
public State state;
public Context(State _state)
{
state = _state;
}
public void Request()
{
state.Handle(this);
}
}
2. State:定义一个接口,封装与Context特定的装该相关;
public abstract class State
{
public abstract void Handle(Context context);
}
3.ConcreteState:实现Concrete
public class ConcreteStateA : State
{
public override void Handle(Context context)
{
context.state = new ConcreteStateB();
}
}
public class ConcreteStateB : State
{
public override void Handle(Context context)
{
context.state = new ConcreteStateA();
}
}
4. Client:
public class Client
{
public void Call()
{
Context context = new Context(new ConcreteStateA());
context.Request();
context.Request();
}
}
Context或者ConcreteState子类决定哪个是后续的状态;将特定的状态局部化,并且把不同的状态隔离开来;