के माध्यम से एक विशिष्ट उप-वर्ग में तर्क पास करना, मान लीजिए कि मेरे पास एक अमूर्त वर्ग पेय है, और एक फैक्ट्री विधि है जो रनटाइम पर बनाने के लिए पेय (शराब, बीयर, आदि) का प्रकार चुनती है।किसी फैक्ट्री विधि
प्रत्येक पेय को स्वयं को ठीक से शुरू करने के लिए कुछ तर्कों की आवश्यकता होती है। इनमें से कुछ सभी पेय के लिए आम हैं; उदाहरण के लिए, उन्हें सभी को DrinkConfig तर्क की आवश्यकता हो सकती है।
लेकिन प्रत्येक पेय में भी अपनी अनूठी आवश्यकताएं हो सकती हैं। शायद शराब को खुद को शुरू करने के लिए एक सोमेलियर सहायक वस्तु की आवश्यकता होती है। बीयर को इसकी आवश्यकता नहीं है, लेकिन इसकी अपनी सहायक वस्तुओं की आवश्यकता हो सकती है।
तो मुझे फैक्ट्री विधि को क्या पास करना चाहिए? जब मैं इसे कॉल करता हूं, तो मेरे पास सभी सहायक वस्तुएं उपलब्ध हैं, इसलिए मैं उन्हें सभी कारखाने में पास कर सकता हूं। लेकिन यह बहुत सारे तर्क होने का अंत हो सकता है। क्या इसे डिजाइन करने का कोई बेहतर तरीका है?
संपादित करें: मान लीजिए कि मैं कारखाने में सहायक वस्तुएं नहीं बना सकता; वे केवल कॉलर से उपलब्ध हैं।
हस्ताक्षर ठीक हैं। समस्या यह है कि आप अपने फैक्ट्री :: CreateDrink() (या जिसे भी कहा जाता है) में तर्कों में आप कैसे पास करते हैं। – dirkgently
यदि आप कारखाने में CreateDrink विधि बनाना चाहते हैं तो आप यह निर्दिष्ट करने के लिए एक enum पैरामीटर का उपयोग कर सकते हैं कि आप कौन सी पेय प्रकार चाहते थे। मुझे विश्वास नहीं है कि ऊपर या दृष्टिकोण गोफ फैक्ट्री पैटर्न का अनुपालन करता है, जहां ऑब्जेक्ट्स ड्रिंक क्लास में बनाई जाती है (मुझे आज रात मेरी पुस्तक की जांच करनी है), लेकिन मुझे यह और अधिक व्यावहारिक लगता है और यह अभी भी प्राथमिक लाभ को बनाए रखता है उप वर्ग पदानुक्रमों के लिए ऑब्जेक्ट सृजन को केंद्रीकृत करना। – sipwiz
मेरी गोफ डिज़ाइन पैटर्न बुक की जांच करने के बाद मुझे खुशी है कि मैंने जो उदाहरण दिया है वह सार फैक्ट्री डिज़ाइन पैटर्न के हिस्से के रूप में फैक्ट्री का उपयोग करने के करीब है। पूरी तरह से अनुरूप होने के लिए वहां एक अमूर्त फैक्ट्री क्लास होना चाहिए जो पेय पदार्थों से प्राप्त होता है लेकिन इस तरह के साधारण मामलों के लिए मैं इसे सामान्य रूप से छोड़ देता हूं। यदि एक और ठोस कारखाने की आवश्यकता होती है तो यह पेय पदार्थों को दोबारा करने में काफी आसान होगा। – sipwiz