8

कार्ल सेगुइन के Foundations of Programming में कारखाने पैटर्न का उपयोग करने पर एक छोटा सा अनुभाग है। उन्होंने यह कहते हुए पारित किया कि "आप कन्स्ट्रक्टर ओवरलोडिंग के साथ समान कार्यक्षमता को पूरा कर सकते हैं", लेकिन यह इंगित नहीं करता कि कब या क्यों?किसी ऑब्जेक्ट को तुरंत चालू करने के लिए ओवरलोडेड कन्स्ट्रक्टर की बजाय फ़ैक्टरी पैटर्न का उपयोग करने के लिए और अधिक समझदारी कब होती है?

तो, किसी ऑब्जेक्ट को तुरंत चालू करने के लिए ओवरलोडेड कन्स्ट्रक्टर की बजाय फैक्ट्री पैटर्न का उपयोग करने के लिए और अधिक समझदारी कब होती है?

+1

कार्ल की रक्षा में वह कहता है कि कारखाना पैटर्न बेहतर पठनीयता प्रदान करता है, लेकिन वह निर्धारण कारकों के रूप में अपने "आंत" और "स्वाद" का उपयोग करता है। – JaredCacurak

उत्तर

4

आप हारने युग्मन करना चाहते हैं तो कारखाने, अधिक समझ में आता है के रूप में आप तो बस, कार कारखाने कॉल कर सकते हैं एसयूवी enum में पारित, और सही वर्ग लौटाया जाता है। आपका आवेदन इस बात पर परवाह नहीं करता कि वास्तव में कौन सी कक्षा वापस आ गई थी, जब तक यह आपकी आवश्यकताओं को पूरा करे।

+0

एक वस्तु जो फैक्ट्री को तर्क के रूप में स्वीकार करती है वह भी निर्माण विधि को कॉल करने के लिए ज़िम्मेदार है। – JaredCacurak

2

मैं फैक्ट्री का उपयोग करता हूं जब मैं फैक्ट्री को कई अलग-अलग संभावित उप-वर्गों में से एक बनाना चाहता हूं (और मैं कॉलर को बेस क्लास के बारे में जानना चाहता हूं लेकिन सबक्लास के बारे में नहीं जानना चाहता हूं)।


इसके अलावा, कभी कभी मैं एक ओवरलोड निर्माता, के बजाय वर्ग के स्थिर तरीकों का उपयोग करेंगे जब विभिन्न स्थिर पद्धतियां ठीक उसी पैरामीटर प्रकार ले (और इसलिए कंस्ट्रक्टर्स पैरामीटर प्रकार अकेले के आधार पर अतिभारित नहीं किया जा सकता)। यहाँ एक काल्पनिक उदाहरण है:

Department 
{ 
    //static factory methods 
    public static Department createFromBoss(string bossName) { ... } 
    public static Department createFromLocation(string locationName) { ... } 
} 
0

मेरे पास 1 स्थिति है जिसमें एक कारखाना उपयोगी है। मुझे वीडियो पर चलाने के लिए वीडियो प्रभाव को तुरंत चालू करना होगा। वीडियो के प्रकार के आधार पर, वीडियो प्रभाव में एक अलग ठोस वर्ग होता है।

यदि मैं कंक्रीट कक्षा को तुरंत चालू करता हूं, तो मैं तत्काल कोड को संशोधित किए बिना और अधिक वीडियो प्रभाव जोड़ने की क्षमता खो देता हूं।

जब मैं अधिक वीडियो प्रभाव जोड़ता हूं, तो मुझे उचित ठोस वर्ग चुनने के लिए केवल कारखाने को संशोधित करना होगा।

क्या यह समझ में आता है?

0

यह हो सकता है कि फैक्ट्री कभी-कभी वापस आने वाले प्रकार के उपप्रकार उत्पन्न करती है। आप इसे एक कन्स्ट्रक्टर के साथ नहीं कर सके, लेकिन कारखाने के साथ लचीलापन है।

4

यदि आप Dependency Injection कर रहे हैं, लेकिन आश्रित के भीतर आवश्यक निर्भरता के उदाहरण बनाने की आवश्यकता है, तो एक विकल्प एक वर्ग कारखाने के लिए एक इंटरफेस इंजेक्ट करना है। कारखाना एक इंटरफेस या एक अमूर्त वर्ग वापस कर सकते हैं। यह कुछ जटिलता की लागत पर लचीलापन, परीक्षण क्षमता, और decoupling प्रदान करता है।

+0

वास्तव में कुछ भाषाओं पर फैक्टरी/बिल्डर के बिना वर्चुअल कंस्ट्रक्शन हासिल नहीं किया जा सकता है (सी ++) –

1

मैं उनके बयान से असहमत हूं। विभिन्न कन्स्ट्रक्टर का उपयोग तब किया जाता है जब आपके पास कन्स्ट्रक्टर बनाने/आरंभ करने के विभिन्न तरीके होते हैं। कारखाना पैटर्न उपयोग के लिए है जब प्रारंभिक मानदंड के परिणामस्वरूप आपके पास निर्माण करने के लिए अलग-अलग वस्तुएं होती हैं।

0

यह क्रिसवे सचित्र के रूप में उप-वर्गों का उपयोग करने के लिए फैक्ट्री पैटर्न का उपयोग करने के लिए और अधिक समझ में आता है, यदि आप पॉलिमॉर्फिज्म को अपने तरीकों के माध्यम से लागू करना चाहते हैं।यदि

Department b = Department.createFromBoss(); 
Department l = Department.createFromLocation(); 

दोनों विभाग के विभिन्न उपवर्गों लौट तो,

b.Close() 

और

l.Close() 
उदाहरण के लिए

विभिन्न कार्यों, जो अगर तुम कोशिश करने के लिए था और बंद मेसियर किया जाएगा ले सकता है () कन्स्ट्रक्टर ओवरलोडिंग के माध्यम से एक एकल वस्तु।

संबंधित मुद्दे

 संबंधित मुद्दे