असल में, यदि आप फैक्ट्री क्लास के लाभ प्राप्त करना चाहते हैं, तो आपको अपनी कक्षा में स्थिर विधि की आवश्यकता है। यह आपको बाद में नए कारखाने के वर्ग बनाने, या मौजूदा व्यवहार को अलग-अलग व्यवहार करने के लिए पुन: कॉन्फ़िगर करने की अनुमति देगा। उदाहरण के लिए, एक कारखाना वर्ग यूनिकॉर्न्स बना सकता है जो IFourHoovedAnimal इंटरफेस को कार्यान्वित करता है। आपके पास एक एल्गोरिदम लिखा हो सकता है जो IFourHoovedAnimal के साथ चीजें करता है और उन्हें तुरंत चालू करने की आवश्यकता होती है। बाद में आप एक नया कारखाना वर्ग बना सकते हैं जो इसके बजाय पेगासस को तुरंत चालू करता है जो IFourHoovedAnimal को भी कार्यान्वित करता है। पुराना एल्गोरिदम अब नए कारखाने का उपयोग कर पेगासस के लिए पुन: उपयोग किया जा सकता है! इस काम को बनाने के लिए पेगासस फैक्ट्री और यूनिकॉर्न फैक्ट्री को कुछ सामान्य बेस क्लास (आमतौर पर एक अमूर्त वर्ग) से प्राप्त होना चाहिए।
तो आप स्थैतिक विधि को अपने कारखाने वर्ग में रखकर देखते हैं, आप पुरानी एल्गोरिदम का पुन: उपयोग करने के लिए नए लोगों के साथ कारखाने के वर्गों को स्वैप कर सकते हैं। यह टेस्टेबिलिटी में सुधार के लिए भी काम करता है, क्योंकि अब इकाई परीक्षणों को कारखाने को खिलाया जा सकता है जो नकली वस्तुओं को बनाता है।
मैंने बहुत छोटी परियोजनाओं के लिए बाद में (कक्षा में स्थैतिक फैक्ट्री विधि जिसे आप बना रहे हैं) कर चुके हैं, लेकिन ऐसा इसलिए था क्योंकि मुझे कुछ पुराने कोड को दोबारा सुधारने में मदद करने के लिए इसकी आवश्यकता थी, लेकिन न्यूनतम में परिवर्तन रखना । असल में उस मामले में मैंने कोड का एक हिस्सा बनाया था जिसने एएसपी.NET नियंत्रणों का एक समूह बनाया, और उन सभी नियंत्रणों को उपयोगकर्ता नियंत्रण में रख दिया। मैं अपनी नई उपयोगकर्ता नियंत्रण संपत्ति को आधारित बनाना चाहता था, लेकिन पुराने विरासत कोड के लिए पैरामीटर आधारित कन्स्ट्रक्टर के साथ उपयोगकर्ता नियंत्रण बनाने के लिए यह आसान था।
इसलिए मैंने एक स्थिर फैक्ट्री विधि बनाई जो सभी मानकों को ले गया, और उसके बाद उपयोगकर्ता नियंत्रण को स्थापित किया और पैरामीटर के आधार पर इसकी गुणों को सेट किया। पुराने विरासत कोड ने उपयोगकर्ता नियंत्रण बनाने के लिए इस स्थिर विधि का उपयोग किया, और भविष्य कोड इसके बजाय "सुंदर" गुणों का उपयोग करेगा।
क्यों यह एक गैर स्थिर विधि के साथ आसान परीक्षण करने के लिए है? –
@devoured elysium: उदाहरण के लिए, एक टेस्ट क्लास में मूल का उप-वर्ग शामिल हो सकता है जो विधि को ओवरराइड करता है, उपकरण या शॉर्ट सर्किटिंग सामान्य व्यवहार के लिए। यह एक स्थिर विधि के साथ (आसानी से) संभव नहीं है। –
@devoured elysium - क्योंकि आप टेस्ट विधियों (कम से कम अच्छी तरह से नहीं) के पैरामीटर के रूप में एक स्थिर वर्ग को पारित नहीं कर सकते हैं। यह निर्भरता इंजेक्शन के बारे में दूसरे बिंदु से संबंधित है। लेकिन, जैसा कि जैक्सिडियन ने कहा, ये अंक महत्वपूर्ण नहीं हो सकते हैं। –