設計模式學習 狀態模式

2021-10-11 15:03:41 字數 853 閱讀 5796

一般玩家角色會有很多狀態行為,並且多個狀態會在不同情況下進行轉換。

一般狀態很少很簡單的化,可以利用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 ...