यह एक समस्या मैं कई बार बहुत का सामना जब मैं मैं समझाने के लिए एक नमूना समस्या का उपयोग करेंगे एक नई एप्लिकेशन डिजाइनिंग हूँ इसवैश्विक राज्य और एकमात्र निर्भरता इंजेक्शन
लगता है मैं साधारण game.so मैं चाहता हूँ लिख रहा हूँ है खिलाड़ियों की एक सूची पकड़ने के लिए। मैं कुछ विकल्प हैं ..
कुछ वर्गprivate static ArrayList<Player> players = new ArrayList<Integer>(); public Player getPlayer(int i){ return players.get(i); }
में एक स्थिर क्षेत्र 1.use
लेकिन यह एक वैश्विक राज्य
2.or मैं एक सिंगलटन का उपयोग कर सकते
class PlayerList{ private PlayerList instance; private PlayerList(){...} public PlayerList getInstance() { if(instance==null){ ... } return instance; } }
लेकिन यह बुरा है, क्योंकि यह एक सिंगलटन है
3.Dependency इंजेक्शन
class Game { private PlayerList playerList; public Game(PlayerList list) { this.list = list; } public PlayerList getPlayerList() { return playerList; } }
यह अच्छा लगता है, लेकिन यह नहीं, अगर खेल के बाहर किसी भी वस्तु (PlayerList को देखने के लिए है जो की जरूरत है सामान्य मामला) मुझे गेम क्लास को विश्व स्तर पर उपलब्ध कराने के लिए उपर्युक्त तरीकों में से एक का उपयोग करना होगा। इसलिए मैं समस्या में एक और परत जोड़ता हूं। वास्तव में कुछ भी हल नहीं किया था।
इष्टतम समाधान क्या है? (वर्तमान में मैं सिंगलटन दृष्टिकोण का उपयोग करता हूं)
के, लेकिन जब मैं प्लेयरलिस्ट उदाहरण का उपयोग कहीं और करना चाहता हूं तो क्या करना चाहिए? – Manu
आप इसे फिर से इंजेक्ट करेंगे। वसंत जैसे एक ढांचे (आपको प्रोग्राम जावा प्रदान किया गया) यह आपके लिए बहुत आसान बना देगा। कुछ भी जो एक सेवा या सिंगलटन नहीं है और इस प्रकार प्लेर्सलिस्ट के साथ उचित रूप से इंजेक्शन नहीं किया जा सकता है, कुछ प्रकार के कारखाने द्वारा बनाया जाएगा जो बदले में खिलाड़ियों के साथ इंजेक्शन दिया जा सकता है और इसे बनाए गए ऑब्जेक्ट्स के साथ पास कर सकता है। हालांकि, यदि आप अपने प्लेयरलिस्ट को प्रत्येक ऑब्जेक्ट में इंजेक्शन देते हैं तो आपको अपने डिज़ाइन के बारे में कुछ अन्य विचार होना चाहिए, विशेष रूप से समावेशन और जानकारी छिपाना। –