設計模式筆記 – 狀態模式Reading Notes, Design Patterns, Developing / By LoneliNerd / 2023 年 4 月 4 日 2023 年 4 月 25 日 分類行為型模式的目的(定義)使上下文對象在持續變換的狀態中,根據不同的狀態實現不同的行為 每一個狀態都是一個對象,狀態內部有對應的進入/執行/退出等等的邏輯上下文對象內部持有很多變量,讓狀態機/自身判斷目前該處於甚麼狀態以及控制狀態的切換;並引用一個當前的狀態對象,持續執行這個當前狀態的邏輯如果不用狀態模式,就只能用多個if-else語句來運行不同狀態的切換和狀態邏輯使用場景例子有限狀態機(Finite-State-Machine)遊戲開發中最常見的狀態模式的一種應用,一般用於做一些簡單的AI邏輯如一個敵人有以下狀態各對應的行動:常態 = 巡邏發現玩家 = 追撃丟失玩家 = 尋找就可以創建以上三個狀態類,並讓敵人自己根據玩家的發現狀態(沒發現、已發現、發現但丟失),來判斷其當前應執行的行為類圖 與策略模式的差異狀態模式與策略模式很類似,同樣是為支持對象在不同情況下執行不同的行為,但是兩者的意圖、維度並不一樣:策略模式是為了解決通過子類化擴展某類對象的功能,導致繼承結構臃腫,缺乏彈性的問題而出現的替代方案所以,對象一般會有一個最適用的策略對象,只有在對象因為某些原因,導致其整一套行為邏輯需要改變時,才會設置一個新的策略對象,相對來說更「宏觀」狀態模式是為了解決原本讓對象在不同狀態下執行不同行為,從而使用大量的if-else判斷語句,導致代碼難以維護而出現的替代方案所以,對象總體的行為邏輯沒有改變,只是讓對象可以通過簡單地切換狀態對象來切換行為,相對來說更「微觀」 參考書目《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates