CSS3選擇器、邊框、背景
阿新 • • 發佈:2021-11-21
概述
當一個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。
類的行為是基於它的狀態改變的。
結構圖
程式碼實現
狀態
/// <summary> /// 抽象狀態類 /// </summary> public abstract class State { public abstract void Handle(Context context); }
/// <summary> /// 具體狀態A /// </summary> public class ConcreteStateA : State {public override void Handle(Context context) { context.State = new ConcreteStateB(); } }
/// <summary> /// 具體狀態B /// </summary> public class ConcreteStateB : State { public override void Handle(Context context) { context.State= new ConcreteStateA(); } }
上下文
/// <summary> /// 上下文類,其中包含要維護的狀態 /// </summary> public class Context { private State state; public Context(State state) { this.state = state; } public State State {get { return state; } set { state = value; Console.WriteLine("當前狀態:" + state.GetType().Name); } } public void Request() { state.Handle(this); } }
客戶端
class Program { static void Main(string[] args) { Context c = new Context(new ConcreteStateA()); c.Request(); c.Request(); c.Request(); c.Request(); Console.Read(); } }
執行結果
優勢
封裝了轉換規則。
列舉可能的狀態,在列舉狀態之前需要確定狀態種類。
將所有與某個狀態有關的行為放到一個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。
允許狀態轉換邏輯與狀態物件合成一體,而不是某一個巨大的條件語句塊。
可以讓多個環境物件共享一個狀態物件,從而減少系統中物件的個數。
使用場景
物件的行為依賴於它的狀態(屬性),並且可以根據它的狀態改變而改變它的相關行為。
當控制一個物件狀態的轉換條件表示式過於複雜的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。