我刚开始使用单数,我只想评估我是否正确地使用了它。我读过单身汉是邪恶的。我只从游戏开发开始,所以像单元测试和多线程这样的东西还没有到达我的手中。
我把游戏的逻辑划分成不同的模块。每个模块都有一个单例类和非单例类(例如。数据模型)。我使用单例作为中介,这样它就可以与其他模块交互。这允许我与其他人一起工作,因为它是可管理的,而且我只需要公开我的单例的助手方法。他不需要知道我是怎么实现的。
我做的对吗?
示例:
中的一个方法来完成的。
发布于 2011-10-05 17:32:36
我绝对不同意单身人士是邪恶的。他们有时被过度使用,也许,但在某些情况下,只是完美的工作。在某些应用程序中,有某种通用数据管理器是有意义的。单例模式在SDK本身中被广泛使用(应用程序委托、共享管理器、默认中心等等)。大多数情况下,这些都不是“纯”的单例,因为您可以访问共享实例,但也可以在必要时创建新实例。
您需要问自己的问题是,在任何时候从任何地方访问数据管理器的单个实例是否有用,如果不是,那么可能不需要单例。但是,如果要在多线程环境中使用单线程,则确实需要担心争用条件(一个线程可以修改资源,而另一个线程正在访问它),文档对如何在Cocoa中最好地实现这一点有很好的解释。
发布于 2011-10-05 17:10:57
您也可以通过实例轻松地做到这一点。
假设您有一个GameMap类和一个Tile类。GameMap表示Tile对象的二维网格。(这是您的FFTactics示例)。
GameMap *gameMap = [[GameMap alloc] init];
NSArray *theTiles = gameMap.tiles;GameMap的实例拥有瓷砖网格,并在创建游戏地图时创建瓷砖。不需要单身人士。
你可能会说:“但我一次只有一个GameMap,有什么大不了的?”如何加载保存的游戏,或加载新的水平?好吧,这就像:
// In whatever class object owns the game map
self.gameMap = [[GameMap alloc] initWithSaveData:saveData];最后,创建一个类的实例,该类具有管理其他事物实例的代码。保持尽可能少的全局,您的代码将更加可伸缩和可维护。
https://stackoverflow.com/questions/7664842
复制相似问题