GoF之狀態 State 模式

2022-02-26 14:42:07 字數 1336 閱讀 6535

狀態模式,在gof中的解釋是:讓乙個物件的行為隨著內部狀態的改變而改變,而該物件也像換了類一樣

在unity3d的環境中,一次執行只能在乙個場景中執行,乙個場景負責乙個不同的功能,而狀態模式每次同樣也只能存在乙個在執行的狀態,所以設計遊戲的時候,我們

可以將乙個狀態和乙個遊戲場景進行繫結;場景之間的轉換便成為了狀態之間的切換;狀態由乙個狀態控制器(statecontroller)控制,每個狀態不必關注上乙個狀態的情況,

增加乙個場景的時候,也不需要改變太多之前設計的東西,只需要重新設計乙個繼承與基礎狀態類的子類,修改狀態控制器,在一定程度上也減少了**的修改,符合開閉原

則,減少了狀態之間的依賴程度。

不在使用switch case來判斷當前的狀態,可以減少新增狀態時候修改switch case帶來的錯誤,符合開閉原則。

與每乙個狀態有關的物件及操作都被是現在乙個場景狀態下,對程式設計者來說,可以清楚的知道每乙個狀態執行時候

所需要的物件及配合的類

狀態模式可以用於不同狀態之間的共享,例如開始場景和開始狀態可用於遊戲的載入場景,載入遊戲的一些初始化工作,如遊戲的載入動畫等。

如果將這些複雜重複的操作放在共享場景中,共享使用與維護,就可以在一定程度上減少開發時間和成本。

當遊戲後期遊戲企劃提出新的系統功能來增加遊戲內容的時候,這些提案可能是增加遊戲小關卡,提供檢視角色資訊圖鑑,玩家排行等功能。當程式設計人員

分析這些新增功能的需求後,如果覺得在現有的場景中解決不了,或者修改過多的話,可以嘗試設計乙個新的場景來完成這些功能。這是我們需要:

在unity3d中新建乙個場景

加入乙個新的場景切換狀態類,對應新的場景上,與之繫結,並在類中實現相關功能。

決定要從那個現有的場景切換到新的場景

決定新的場景結束後要轉換到那個場景

上述流程就程式的**設計而言,只是增加乙個場景狀態類,增加一些相關功能的類檔案,不會設計到太多原有類的修改或者替換,符合一定的開閉原則。

使用狀態模式來控制角色的不同狀態下的ai行為。

網路遊戲的客戶端,需要處理與遊戲伺服器的連線狀態,一般包含了開始連線,連線中,斷線等狀態,而在不同的狀態下,會有不同的封包資訊處理方式,需要

分別實現。

如果是通關型別遊戲,進入關卡時候通常會分成不同的階段,包含載入資料,顯示管卡資訊,倒數通知開始,關卡進行,關卡結束和分數計算,這些不同的階段可以用不同的

狀態類進行負責。

至此,狀態模式的隨筆結束,此文只是作為學習的小結,感謝蔡昇達先生的書籍《設計模式與遊戲完美開發》。

另附github練習原始碼:狀態模式練習

Gof之狀態模式

1.在環境類中會維持乙個對抽象狀態類物件的引用,並且有乙個改變狀態的方法setstate 還應該有一些會引起狀態改變的資料,例如銀行系統的存錢 取錢方法,這是在環境類中定義的。2.抽象狀態類,這裡面定義了一些在某種狀態下需要的操作handle 如銀行系統在某個狀態下存錢 取錢。可以肯定一定要有狀態檢...

設計模式之狀態模式(State )

狀態模式是根據其狀態變化來改變物件的行為,允許物件根據內部狀態來實現不同的行為。內容類可以具有大量的內部狀態,每當呼叫實現時,就委託給狀態類進行處理。當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判...

狀態 State 模式

物件狀態影響物件行為 物件擁有不同的狀態,往往會行使不同的行為.1 動機 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化。比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉化之前引入緊耦...