【发布时间】:2013-04-02 09:25:35
【问题描述】:
我正在为游戏编写 StateManager(我正在使用 C++ 和 SFML,但我试图隐藏特定于语言的元素,因为这是关于任何 OOP 语言的问题)。 我有一个设置,其中 StateManager 更新当前的活动状态。但是,State 必须能够更改活动状态(例如,在菜单中按“Play”会启动 PlayingState),因此我在我的 State 类中保留对 StateManager 的引用。
这是一个让事情更清楚的 UML 图。
如您所见,StateManager 和 State 都相互引用。 我怎样才能避免意大利面条代码?我应该将 StateManager 设为单例类吗?当我们这样做时,游戏类应该是单例类吗?我可以轻松做到这一点,但我真的不喜欢我的游戏中的其他类能够访问游戏类或 statemanager 类,即使我是唯一的程序员。
【问题讨论】:
-
你能把State也需要访问的部分分开吗?即从更简单的合约(接口)组成 StateManager?即具有更新和渲染的 IRenderable。那么你只给State这部分的StateManager。此外,您还想将此 IRenderable 注入状态(即查看控制反转)。
-
我不确定你的意思。你能举一个这样的例子吗?你的意思是,例如会有另一个类使用 changeState 方法,并且那个 State 有对这个类的引用,但对 StateManager 没有?
标签: oop coding-style