一般玩家角色會有很多狀態行為,並且多個狀態會在不同情況下進行轉換。
一般狀態很少很簡單的化,可以利用switch 羅列狀態,類似於下面實現:
for (;;)
}
但是這種方式會隨著狀態增加,**耦合度不斷增加,不適應**後期修改。
狀態模式就是就是單獨將狀態看成乙個個狀態類,每種狀態都是自己需要改變的資料和邏輯行為:
#pragma once
#include "herostate.hpp"
class hero
void update()
void change(herostate* state)
private:
herostate* m_state;
};
#pragma once
class hero;
class herostate
;class duckstate : public herostate
};class runstate : public herostate
};class jumpstate : public herostate
};class enumstate
;duckstate enumstate::m_duck;
runstate enumstate::m_run;
jumpstate enumstate::m_jump;
測試:
hero hero;
hero.update();
這樣就可以有效擴充套件角色狀態,避免**耦合問題。 學習設計模式 狀態模式
說明 定義 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。該模式適用於那些複雜的條件不一樣,執行不一樣的場景,當然簡單的情況,直接用if else處理就可以了。需求 員工加班,不同的時間,寫程式的效率不一樣。解決方式 a.定義乙個狀態抽象類並定義乙個處理方法 b.根據不同狀...
設計模式學習筆記 狀態模式
定義 當乙個物件內在的狀態改變時,允許其改變行為,這個物件看起來像是改變了其類。狀態模式不太好理解,我現在還沒有完全理解,這個模式給我的第一印象就是比較亂,給我的感覺好像是兩個類互相依賴,呼叫 的方法,呼叫 的方法,弄的好亂,所以這個狀態模式就不用通用類圖去描述了,那樣會不知所云,還是舉乙個實際的例...
設計模式學習筆記 狀態模式
模式中的角色 state 抽象狀態角色 concretestate 具體狀態角色 context 環境角色 狀態模式通用類圖如下 具體的類圖如下 實現如下 package state2 context類,維護乙個concretestate子類的例項,這個例項定義當前的狀態。public class ...