第二篇:狀態(tài)機模式

狀態(tài)機模式非常簡單,實際上任何一個類就是一個狀態(tài)機模式。
class A{ public: void fun(int a,int b); }
任何一個類的成員函數(shù)(靜態(tài)成員函數(shù)除外)都包含一個this指針指向一個本類對象。
事實上,A a;聲明一個對象的時候,成員函數(shù)和其中的成員變量并不在同一個地方,正是因為有了this指針,成員函數(shù)才能操縱成員變量。

狀態(tài)機模式

本來所有的狀態(tài)的切換全部都是在一個類(譬如A類)中,但是因為如果狀態(tài)很多,狀態(tài)切換的函數(shù)就會變得很復雜。所以將這部分全部拉了出來,單獨寫成state類。
class A{ public: void changeState(State* state); //一般來說類狀態(tài)的改變邏輯寫在這個函數(shù)里,使用狀態(tài)模式之后,寫在狀態(tài)類中 void update(float dt); state* mCurState; //標志當前的狀態(tài) }
class State{ //某一個狀態(tài)下,要執(zhí)行的行為。注意其中有指向類A的指針(這就是關(guān)鍵) virtual void excute(A* a) = 0; }
所以A添加的任何一個狀態(tài),只需繼承State類,并重寫excute函數(shù)即可。在excute函數(shù)中寫本狀態(tài)要執(zhí)行的邏輯。
而類A的update只需:
void A::update(float dt){ mCurState->excute(this); }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,042評論 0 9
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,652評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • 姓名:謝新葵 公司:寧波大發(fā)化纖有限公司 寧波盛和塾《六項精進》第235期學員感謝二組 【日精進打卡第84天】 知...
    sandy201704閱讀 136評論 0 0
  • 大山里的黑夜 往左分不清 往左也看不見 繼續(xù)往左 轟隆轟隆只有聲音作響 是大山,還是黑夜 分不清的 已是一體 明天...
    長道赫書閱讀 362評論 3 6

友情鏈接更多精彩內(nèi)容