背景
我正在Swift中开发一款iOS游戏,该游戏具有实时主题更新功能。这基本上意味着SKSpriteObjects在主题更改时会更改其颜色。在我实现它的过程中,我希望以一种良好的OOP实践和良好的可伸缩性(许多对象同时这样做(的方式来实现它。我有两个实现这一目标的想法:
方法一:Notifier/Observer+Singleton
-将所有可更新的SKSpriteObjects注册为关键字"updateTheme"的观察者-使用当前主题颜色创建一个名为GameState的单例-当"updateTheme"通知被触发时,每个观察者都会联系到singleton以获取他们的新颜色。
方法二:通知程序/观察者+传递的对象
-将所有可更新的SKSpriteObjects注册为关键字"updateTheme"的观察者-触发通知"updateTheme"的对象将创建一个对象并将其附加到包含当前主题属性的通知。-当观察到"updateTheme"通知时,每个观察者将打开对象,然后访问该打开对象的更新颜色。
问题
尽管我认为在通知中传递对象是一种更好的OOP实践,但我认为所有正在进行的展开并不是速度方面的最佳想法。因此,我更倾向于采用单例方法。你有什么想法?也许有一种我没有想到的更好的方法来大规模更新游戏中的所有对象。
从不使用单例
或者,换言之:
只要有两个选项,其中一个涉及单例,就选择另一个选项。
我的建议是,首先正确地编写游戏,然后看看它是否会影响性能,如果并且只有当它会影响性能时,然后担心性能。通常情况下,你会发现一些地方可以提供漂亮整洁的算法优化,使你的游戏表现更好,而不是对所有源代码进行调整和黑客攻击,以节省各处的时钟周期。
话虽如此,考虑另一种选择:事件观测者将对发出通知的对象的引用作为第一个参数传递给他们是一种常见的模式。那么,为什么不让可观测物体将其自身的参考传递给观测者,这样观测者就可以从可观测物体中获得他们需要的任何东西呢?