一天一种设计模式——状态模式

作用:当人物有复杂的状态转换时使用
Context:状态拥有者
State:状态的接口类
状态拥有着持有一个状态的接口类,在构造方法时定义其状态
状态的接口类中持有状态的拥有者,可在每一个状态内部切换其状态拥有者的状态

//代码运行
public class Text {
Context context = new Context();
context.SetState(new ConcreteStateA(context));
context.Request(5);
context.Request(15);
context.Request(25);
context.Request(35);
}
//状态拥有者
public class Context {
State mState = null;
public void Request(int value) {
mState.Handle(value);
}
public void SetState(State state) {
Debug.Log(“Context.SetState:”+state);
mState = state;
}
}
//状态接口
public abstract class State {
protected Context mContext = null;
public State(Context context){
mContext = context;
}
public abstract void Handle(int Value);
}
//状态A
public class ConcreteStateA : State {
public ConcreteStateA(Context context) : base(context) { }
public override void Handle(int Value)
{
Debug.Log(“ConcreteStateA.Handle” );
if (Value > 10)
mContext.SetState(new ConcreteStateB(mContext));
}
}
//状态B
public class ConcreteStateB : State
{
public ConcreteStateB(Context context) : base(context) { }
public override void Handle(int Value)
{
Debug.Log(“ConcreteStateB.Handle”);
if (Value > 20)
mContext.SetState(new ConcreteStateC(mContext));
}
}
//状态C
public class ConcreteStateC : State
{
public ConcreteStateC(Context context) : base(context) { }
public override void Handle(int Value)
{
Debug.Log(“ConcreteStateC.Handle”);
if (Value > 30)
mContext.SetState(new ConcreteStateA(mContext));
}
}

猜你喜欢

转载自blog.csdn.net/qq_42398469/article/details/85235352