2010-03-26 27 views
30

मुझे अक्सर चारों ओर फेंक दिया गया शब्द दिखाई देता है, और मैंने इसे समय के साथ कोड और पुस्तकालयों में इस्तेमाल किया होगा, लेकिन मुझे वास्तव में यह कभी नहीं मिला। अधिकांश लेखन-अप में मैं आया, वे बस आपको यह समझने की उम्मीद कर रहे थे।क्लास फैक्ट्री वास्तव में क्या है?

कक्षा फैक्टरी क्या है? क्या कोई अवधारणा को समझा सकता है?

उत्तर

12

एक कक्षा कारखाने अन्य वर्गों के उदाहरणों का निर्माण करता है। आम तौर पर, वे जो कक्षाएं बनाते हैं वे एक सामान्य बेस क्लास या इंटरफेस साझा करते हैं, लेकिन व्युत्पन्न कक्षाएं लौटा दी जाती हैं।

उदाहरण के लिए, यदि आप एक वर्ग कारखाना है कि एक डेटाबेस कनेक्शन स्ट्रिंग लिया और एक वर्ग को लागू करने

5

एक वर्ग कारखाना एक विधि है (उदाहरण के लिए कुछ पैरामीटर के अनुसार) आपको एक अनुकूलित वर्ग (तत्काल नहीं!) देता है।

1

मुझे लगा कि यह बहुत अच्छी तरह से बताता है (मेरे लिए, वैसे भी)। मुझे लगता है कि कारखाने डिजाइन पैटर्न में कक्षा कारखानों का उपयोग किया जाता है।

अन्य क्रिएशनल पैटर्न की तरह

, यह [कारखाने डिजाइन प्रतिरूप] को निर्दिष्ट उद्देश्य यह है कि बनाया होगा की सटीक वर्ग के बिना वस्तुओं (उत्पाद) बनाने की समस्या से से संबंधित है। कारखाने विधि डिजाइन पैटर्न के लिए एक अलग विधि को परिभाषित वस्तुओं, जो उपवर्गों तो उत्पाद की व्युत्पन्न प्रकार कि बनाया जाएगा निर्दिष्ट करने के लिए ओवरराइड कर सकते हैं बनाने के द्वारा इस समस्या को संभालती है। अधिक आम तौर पर, फ़ैक्टरी विधि का उपयोग अक्सर को किसी भी विधि से संदर्भित करने के लिए किया जाता है जिसका मुख्य उद्देश्य ऑब्जेक्ट्स का निर्माण होता है।

http://en.wikipedia.org/wiki/Factory_method_pattern

क्षमा याचना करता है, तो आप पहले से ही इस पढ़ा है और पाया है कि यह अपर्याप्त होने के लिए गए हैं।

1

विकिपीडिया लेख एक बहुत अच्छा परिभाषा देता है IDbConnection ऐसे SqlConnection के रूप में (वर्ग और नेट से इंटरफेस) लौट आए हो सकता है: http://en.wikipedia.org/wiki/Factory_pattern

लेकिन शायद सबसे अधिक आधिकारिक परिभाषा डिजाइन पैटर्न पुस्तक गामा एट अल द्वारा पाई जाएगी। (आमतौर पर चार पुस्तक की गिरोह कहा जाता है)।

25

हेरेस की एक छोटी सी अतिरिक्त जानकारी है जो कुछ अन्य तकनीकी रूप से सही, लेकिन छोटे उत्तरों को बेहतर ढंग से समझने में मदद कर सकती है।

सख्ती से एक वर्ग फैक्ट्री एक कार्य या विधि है जो एक वर्ग बनाता है या चयन करता है और इसे इनपुट पैरामीटर या वैश्विक संदर्भ से निर्धारित कुछ शर्त के आधार पर देता है। यह आवश्यक है जब टाइप ऑब्जेक्ट की टाइप रनटाइम तक निर्धारित नहीं किया जा सकता है। कार्यान्वयन सीधे किया जा सकता है जब कक्षाएं इस्तेमाल होने वाली भाषा में पाइथन जैसी वस्तुएं होती हैं।

चूंकि किसी भी वर्ग का प्राथमिक उपयोग स्वयं के उदाहरण बनाना है, सी ++ जैसी भाषाओं में जहां कक्षाएं ऐसी वस्तुएं नहीं हैं जिन्हें चारों ओर पारित किया जा सकता है और छेड़छाड़ की जा सकती है, वही परिणाम अक्सर "वर्चुअल कंस्ट्रक्टर" को अनुकरण करके हासिल किया जा सकता है, जहां आप बेस-क्लास कन्स्ट्रक्टर को कॉल करते हैं लेकिन कुछ व्युत्पन्न कक्षा का उदाहरण वापस लेते हैं।यह अनुकरण किया जाना चाहिए क्योंकि कन्स्ट्रक्टर वास्तव में virtual सी ++ में नहीं हो सकता है, यही कारण है कि इस तरह की वस्तु-वर्ग-कारखानों को आम तौर पर स्टैंडअलोन फ़ंक्शंस या स्थैतिक तरीकों के रूप में लागू नहीं किया जाता है।

आभासी कार्यों सामान्य रूप से वस्तु के वास्तविक प्रकार संदर्भित द्वारा हल कर रहे हैं "late", लेकिन निर्माताओं के मामले में, वस्तु अभी तक अस्तित्व में नहीं है, इसलिए प्रकार किसी और तरीके से निर्धारित किया जाना चाहिए।

सर्वोत्तम कार्यान्वयन वे हैं जो नए उम्मीदवार वर्गों को स्वचालित रूप से संभालते हैं, जब वे वर्तमान में फैक्ट्री में हार्डकोड किए गए केवल एक निश्चित सीमित सेट के बजाय जोड़े जाते हैं (हालांकि व्यापार-बंद अक्सर स्वीकार्य होता है यदि फैक्ट्री एकमात्र जगह है संशोधन)।

जेम्स कोप्लिएन की 1 99 1 की किताब Advanced C++: Programming Styles and Idioms में सी ++ में ऐसे वर्चुअल जेनेरिक कन्स्ट्रक्टर को लागू करने के एक तरीके पर विवरण है। C++ templates का उपयोग करके ऐसा करने के बेहतर तरीके भी हैं, लेकिन यह उस पुस्तक में शामिल नहीं था जो मानक भाषा परिभाषा में उनके जोड़े जाने का अनुमान लगाता है। वास्तव में, सी ++ टेम्पलेट्स स्वयं वर्ग कारखानों हैं क्योंकि जब भी वे विभिन्न वास्तविक प्रकार के तर्कों के साथ उपयोग किए जाते हैं तो वे एक नई कक्षा को तत्काल बनाते हैं। अपडेट: मैंने 1 99 8 के पेपर में लिखा है जिसे उन्होंने यूरोपीओपीपी के लिए C++ Idioms शीर्षक दिया था, जहां अन्य चीजों के साथ, वह अपनी पुस्तक में मुहावरे को संशोधित और पुन: समूहित करता है, जिसे डिजाइन-पैटर्न फॉर्म ए ला 1 99 4 Design Patterns: Elements of Re-Usable Object-Oriented Software पुस्तक में बदल दिया गया है। नोट विशेष रूप से Virtual Constructor अनुभाग (जो उसकी Envelope/Letter पैटर्न संरचना का उपयोग करता है)।

प्रश्न Class factory in Python के लिए यहां संबंधित उत्तरों को भी देखें। Abstract Factory, Template Style भी देखें जो 2001 डॉ डॉबब का लेख है जिसे सी ++ टेम्पलेट्स के साथ लागू करने के बारे में भी है।

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