【設計模式遊戲完美開發】狀態模式

 

Context (狀態擁有者):擁有一個IState狀態對象,由外部調用SetState方法進行賦值;Update方法會調用IState對象的Update方法

IState(狀態接口):擁有一個Context狀態擁有者對象,Update方法和ChangeState(IState)方法,其中,Update方法是執行狀態邏輯的,ChangeState(IState)方法是轉換當前狀態爲參數IState狀態的。

StateA、StateB、StateC(狀態實現類):繼承自IState並實現其接口。

IState擁有Context對象是爲了在ChangeState(IState)方法能通過Context對象的SetState(IState)方法轉換當前狀態。

//僞代碼
Context context = new Context();
IState state = new StateA(context);
context.SetState(state);


幀調用context的Update方法
context.Update();

假設StateA的Update方法會執行context.SetState(new StateB(context));
假設StateB的Update方法會執行context.SetState(new StateC(context));
假設StateC的Update方法會執行context.SetState(new StateA(context));

狀態轉換關係爲      A -> B -> C -> A

總結:

  狀態模式運用依賴倒置原則和聚合組合複用原則,將有跡可循的複雜邏輯整合成狀態來理解,將業務邏輯內部細節隱藏,客戶只需瞭解到轉換到某個狀態下會有什麼表現,甚至可以交給狀態自身去控制這個轉換,如上例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章