Oyun oluşturmak için cocos2d-x oyun motorunu kullanıyorum. Motor zaten birçok tekil kullanır. Birisi kullandıysa, o zaman bazılarına aşina olmalı:
Director
SimpleAudioEngine
SpriteFrameCache
TextureCache
EventDispatcher (was)
ArmatureDataManager
FileUtils
UserDefault
ve daha pek çoğu, yaklaşık 16 derslik. Bu sayfada benzer bir liste bulabilirsiniz: Cocos2d-html5 v3.0 içindeki Singleton nesneleri Ancak yazmak istediğimde oyun oynamak için çok daha fazla singleton'a ihtiyacım var:
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)
.....
Neden onların singleton olması gerektiğini düşünüyorum? Çünkü onlara oyunumda çok farklı yerlerde ihtiyacım olacak ve paylaşılan erişim çok kullanışlı olurdu. Başka bir deyişle, onları bir yerde yaratacak ve işaretçilerimi tüm mimarime iletecek çok zor olacağı için anlamıyorum. Ayrıca bunlar sadece bir tane ihtiyacım olan şeyler. Her durumda birkaç kişiye ihtiyacım olacak, ben de bir Multiton deseni kullanabilirim. Ancak en kötüsü, Singleton’ın şu sebeplerden dolayı en ağır biçimde eleştirilen model olmasıdır:
- bad testability
- no inheritance available
- no lifetime control
- no explicit dependency chain
- global access (the same as global variables, actually)
- ....
Burada bazı düşünceleri bulabilirsiniz: https://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons ve https://stackoverflow.com/questions/4074154/when-should-the-singleton -pattern--kullanılmamalıdır-yanında-bariz
Sanırım yanlış bir şey yapıyorum. Sanırım kodum kokuyor . :) Daha deneyimli oyun geliştiricilerinin bu mimari problemi nasıl çözdüğünü tahmin ediyorum? Kontrol etmek istiyorum, belki de oyun geliştirmede , halihazırda oyun motorunda olanları düşünen 30'dan fazla singleton olması normaldir .
İhtiyacım olan tüm bu sınıfların örneklerine sahip olacak bir Singleton-Cephe kullanmayı düşündüm, ancak her biri zaten bir tekillik olmayacaktı. Bu, birçok sorunu ortadan kaldıracak ve Cephe'nin kendisi olacak tek bir singleton olacaktı. Ancak bu durumda başka bir tasarım problemim olacak. Cephe bir ALLAH NESNE olacak. Sanırım bu da kokuyor . Bu yüzden bu durum için iyi bir tasarım çözümü bulamıyorum. Lütfen tavsiye.