我正在爲遊戲編寫一個StateManager(我使用C++和SFML,但我試圖隱藏特定於語言的元素,因爲這是關於任何OOP語言的問題)。 我有一個設置,其中一個StateManager更新當前活動狀態。然而,一個國家必須能夠改變活動狀態(例如,按下菜單中的「播放」開始播放狀態),所以我保持對StateManager中StateManager的引用。避免意大利麪代碼(gamestatemanager)
下面是一個使事情更清晰的UML圖。
如您所見,StateManager和State都引用了彼此。 如何避免spaghetticode?我應該讓StateManager成爲單身人士嗎?雖然我們認爲,遊戲課應該是單身課程嗎?我可以很容易地做到這一點,但是我並不喜歡我的遊戲中的其他類能夠訪問遊戲類或statemanager類,即使我是唯一的程序員。
你能分出國家需要訪問的部分嗎?即從更簡單的契約(接口)組成StateManager?即可更新和呈現的IRenderable。然後你只給StateManager的這個部分。你也想把這個IRenderable注入狀態(即查看控制反轉)。 –
我不確定你的意思。你能舉出這樣一個例子嗎?你的意思是會有另一個類與changeState方法,該國有這個類的引用,但不是給StateManager? – RaptorDotCpp