1. 程式人生 > >一天一種設計模式——狀態模式

一天一種設計模式——狀態模式

作用:當人物有複雜的狀態轉換時使用
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));
}
}