我正在尝试自学编程。我以与大多数人相同的方式开始;制作小而杂乱的应用程序和游戏,以不那么简单的方式做简单的事情。最近,我一直在尝试通过编写一个稍微复杂一些的游戏来迈出下一步,该游戏使用 OOP 设计来编写更好、更模块化的代码!
我遇到的主要问题是我的主要 StateManager (FSM) 类的设计(在介绍/菜单/游戏/等屏幕状态之间切换)。高高在上,我只见过两种设计方法:
使用 switch/case 语句 + 枚举在状态之间切换..
制作一个单例 FSM 类来处理向/从向量推送/弹出状态。
现在,我的问题是,switch case 语句非常重复且笨拙,这与我使用这个项目来自学 OOP 的目标背道而驰。
我的第二个也是更大的问题是“单身”建议。
正如我之前所说,我正在努力自学,在编程方面我还有很多东西要学,尤其是在 OOP 和设计模式等领域。我遇到了一个问题,对于我发现的每一个“单例都是邪恶的”线程和讨论,我发现人们在他们的代码中使用单例来制作“引擎”类和 FSM 的教程和参考资料一样多。这是一个非常一致的混合信息。
我想我只是不明白为什么......即使你只想/打算拥有一个类的单个对象,为什么有必要/有益于将构造函数设为私有并创建一个单例?我读过很多关于单例有多糟糕,它们本质上是如何全局的,它们是如何阻碍多线程的,以及有多少程序员认为它们被过度使用或只是简单的糟糕设计......但我看到一个又一个例子使用它们的人,很少有反例显示替代方法。
普通班就不能做同样的事情吗?明确限制创建实例的目的是什么?我只听说过关于单例的负面消息,但人们似乎经常使用它们……我是否完全错过了单例和 OOP 的一些内容?
单例的使用只是一种趋势,还是人们称单例为“邪恶”的一种趋势?我该如何解决这个问题..?开关/外壳 FSM 和单例 FSM 之间没有什么东西吗?有人不能以完全相同的方式设计他们的程序的状态系统而不使他们的任何类成为单例吗?那会改变什么吗?[困惑]