ฉันใช้โปรแกรมเกม cocos2d-x เพื่อสร้างเกม เครื่องยนต์ใช้ซิงเกิลตันหลายตัวอยู่แล้ว หากมีคนใช้มันพวกเขาควรคุ้นเคยกับบางคน:
Director
SimpleAudioEngine
SpriteFrameCache
TextureCache
EventDispatcher (was)
ArmatureDataManager
FileUtils
UserDefault
และอื่น ๆ อีกมากมายโดยรวมประมาณ 16 ชั้นเรียน คุณสามารถค้นหารายการที่คล้ายกันในหน้านี้: วัตถุ Singleton ใน Cocos2d-html5 v3.0แต่เมื่อฉันต้องการที่จะเขียนฉันเกมฉันต้องการ Singletons มากขึ้น:
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 ได้เช่นกัน แต่สิ่งที่แย่ที่สุดคือ Singleton เป็นรูปแบบที่ถูกวิพากษ์วิจารณ์อย่างหนักที่สุดเนื่องจาก:
- 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-so-bad-about-singletonsและhttps://stackoverflow.com/questions/4074154/when-should-the-singleton -pattern ที่ไม่ได้รับการใช้-นอกเหนือจากที่เห็นได้ชัด
ดังนั้นฉันคิดว่าฉันกำลังทำอะไรผิด ฉันคิดว่าฉันรหัสกลิ่น :) ฉันกระทบกระทั่งนักพัฒนาเกมที่มีประสบการณ์มากขึ้นแก้ปัญหาสถาปัตยกรรมนี้ได้อย่างไร ฉันต้องการตรวจสอบบางทีอาจเป็นเรื่องปกติในการพัฒนาเกมที่มีมากกว่า 30 ซิงเกิลตันถือว่าเป็นเกมที่มีอยู่แล้วในเอ็นจิ้นเกม
ฉันคิดว่าจะใช้ Singleton-Facade ซึ่งจะมีอินสแตนซ์ของคลาสเหล่านี้ทั้งหมดที่ฉันต้องการ แต่แต่ละอันก็ไม่ได้เป็นซิงเกิลแล้ว นี่จะกำจัดปัญหามากมายและฉันจะมีเพียงหนึ่งเดียวซึ่งจะเป็นซุ้มเอง แต่ในกรณีนี้ฉันจะมีปัญหาการออกแบบอีก อาคารจะกลายเป็นโครงการของพระเจ้า ฉันคิดว่ามันมีกลิ่นเหมือนกัน ดังนั้นฉันไม่สามารถหาทางออกการออกแบบที่ดีสำหรับสถานการณ์นี้ โปรดให้คำแนะนำ.