मैं गेम बनाने के लिए 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)
.....
मुझे क्यों लगता है कि उन्हें एकल होना चाहिए? क्योंकि मुझे अपने खेल में बहुत अलग स्थानों पर उनकी आवश्यकता होगी, और साझा पहुंच बहुत आसान होगी। दूसरे शब्दों में, मुझे नहीं लगता कि उन्हें कहीं बनाने के लिए और मेरी सभी वास्तुकला के लिए नीचे बिंदुओं को पारित करने के लिए क्योंकि यह बहुत मुश्किल होगा। इसके अलावा, इस तरह की चीजें मुझे केवल एक ही चाहिए। किसी भी मामले में मुझे कई की आवश्यकता होगी, मैं एक मल्टीटन पैटर्न का भी उपयोग कर सकता हूं। लेकिन सबसे बुरी बात यह है कि सिंगलटन सबसे ज्यादा आलोचना की जाने वाली परिपाटी है क्योंकि:
- 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 -pattern-नहीं होने वाली इस्तेमाल किया-अलावा-स्पष्ट
इसलिए, मुझे लगता है, मैं कुछ गलत कर रहा हूं। मुझे लगता है कि मेरे कोड से बदबू आ रही है । :) मैं घायल कैसे अधिक अनुभवी खेल डेवलपर्स इस वास्तु समस्या का समाधान? मैं जांचना चाहता हूं, शायद 30 से अधिक सिंग्लेटों के लिए खेल के विकास में अभी भी सामान्य है , पहले से ही खेल इंजन में माना जाता है।
मैंने एक सिंगलटन-फैकेड का उपयोग करने के बारे में सोचा है जिसमें इन सभी वर्गों के उदाहरण होंगे जिनकी मुझे आवश्यकता है, लेकिन उनमें से प्रत्येक पहले से ही एकल नहीं होंगे। यह बहुत सारी समस्याओं को खत्म कर देगा, और मेरे पास केवल एक सिंगलटन होगा जो कि फेकडे ही होगा। लेकिन इस मामले में मुझे एक और डिज़ाइन समस्या होगी। मुखौटा एक GOD OBJECT बन जाएगा। मुझे लगता है कि इससे भी बदबू आती है । इसलिए मुझे इस स्थिति के लिए एक अच्छा डिज़ाइन समाधान नहीं मिल रहा है। कृपया सलाह दें।