我正在为游戏编写 StateManager(我正在使用 C++ 和 SFML,但我试图隐藏特定于语言的元素,因为这是关于任何 OOP 语言的问题)。我有一个设置,其中 StateManager 更新当前的活动状态。但是,State 必须能够更改活动状态(例如,在菜单中按“Play”会启动 PlayingState),因此我在我的 State 类中保留对 StateManager 的引用。
这是一个让事情更清楚的UML图。
如您所见,StateManager 和 State 都相互引用。我怎样才能避免意大利面条代码?我应该将 StateManager 设为单例类吗?当我们这样做时,游戏类应该是单例类吗?我可以轻松做到这一点,但我真的不喜欢我的游戏中的其他类能够访问游戏类或 statemanager 类,即使我是唯一的程序员。