게임을 만들기 위해 cocos2d-x 게임 엔진을 사용합니다. 엔진은 이미 많은 싱글 톤을 사용합니다. 누군가 그것을 사용했다면, 그들 중 일부에 익숙해야합니다.
Director
SimpleAudioEngine
SpriteFrameCache
TextureCache
EventDispatcher (was)
ArmatureDataManager
FileUtils
UserDefault
전체적으로 약 16 개의 수업이 있습니다. 이 페이지에서 비슷한 목록을 찾을 수 있습니다. Cocos2d-html5 v3.0의 싱글 톤 객체 그러나 게임을 쓰려면 훨씬 더 많은 싱글 톤이 필요합니다.
PlayerData (score, lives, ...)
PlayerProgress (passed levels, stars)
LevelData (parameters per levels and level packs)
SocialConnection (Facebook and Twitter login, share, friend list, ...)
GameData (you may obtain some data from server to configure the game)
IAP (for in purchases)
Ads (for showing ads)
Analytics (for collecting some analytics)
EntityComponentSystemManager (mananges entity creation and manipulation)
Box2dManager (manages the physics world)
.....
왜 싱글 톤이어야한다고 생각합니까? 게임에서 매우 다른 장소에서 필요하기 때문에 공유 액세스가 매우 편리합니다. 다시 말해서, 어딘가에 그것들을 생성하고 모든 아키텍처에 포인터를 전달하는 것은 매우 어려울 것입니다. 또한 이것들은 하나만 필요합니다. 어쨌든 여러 개가 필요하며 Multiton 패턴도 사용할 수 있습니다. 그러나 최악의 점은 싱글 톤이 다음과 같은 이유로 가장 비판적인 패턴이라는 것입니다.
- bad testability
- no inheritance available
- no lifetime control
- no explicit dependency chain
- global access (the same as global variables, actually)
- ....
https://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons 및 https://stackoverflow.com/questions/4074154/when-should-the-singleton 에서 몇 가지 생각을 찾을 수 있습니다. -사용하지 않는 패턴-명백한 것
그래서 나는 뭔가 잘못하고 있다고 생각합니다. 내 코드 냄새가 나는 것 같아요 . :) 나는 더 숙련 된 게임 개발자들이이 건축 문제를 어떻게 해결 하는가? 나는 이미 게임 엔진에있는 것으로 간주되는 싱글 톤을 30 개 이상 갖는 것이 게임 개발에서 여전히 정상인지 확인하고 싶습니다 .
필자는 필요한 모든 클래스의 인스턴스가있는 Singleton-Facade를 사용하려고 생각했지만 각각 싱글 톤이 아닙니다. 이것은 많은 문제를 없애고 Facade 자체가 될 싱글 톤 하나만 가질 것입니다. 그러나이 경우 다른 디자인 문제가 발생합니다. 외관은 하나님의 대상이 될 것입니다. 나는 이것도 냄새가 생각합니다 . 따라서이 상황에 맞는 좋은 디자인 솔루션을 찾을 수 없습니다. 조언을 부탁드립니다.