फ़ैक्टरी और एब्सट्रैक्ट फ़ैक्टरी डिज़ाइन पैटर्न के बीच बुनियादी अंतर क्या है? [बन्द है]


483

फ़ैक्टरी और एब्सट्रैक्ट फ़ैक्टरी पैटर्न के बीच बुनियादी अंतर क्या है?


11
मेरी राय में एब्सट्रैक्ट फैक्ट्री पैटर्न और फैक्ट्री मेथड के अंतर में उत्तर की गुणवत्ता यहाँ के लोगों की तुलना में बेहतर है।
कुर्ज्डमेटल

1
मुख्य अंतर यह है कि फैक्ट्री मेथड इनहेरिटेंस का उपयोग करता है (इनडायरेक्टेशन वर्टिकल ईजी है createThing()) और एब्सट्रैक्ट फैक्ट्री कंपोजिशन (इनडायरेक्शन क्षैतिज है जैसे getFactory().createThing()) का उपयोग करता है
डेविड जेम्स

1
यह सवाल यह नहीं है कि इसके कुछ उत्तरदाताओं को क्या लगता है। टेंगिज़ के उत्तर को याद न करें , जो तीन अलग-अलग शब्दों फ़ैक्टरी, एब्सट्रैक्ट फ़ैक्टरी और फ़ैक्टरी विधि को परिभाषित करता है।
डेव श्विसगुथ

जवाबों:


412

फैक्टरी पैटर्न के साथ, आप (कार्यान्वयन के उदाहरण का उत्पादन Apple, Banana, Cherry, कहते हैं - एक विशेष इंटरफ़ेस के, आदि) IFruit

एब्सट्रैक्ट फैक्ट्री पैटर्न के साथ, आप किसी को भी अपनी फैक्ट्री प्रदान करने का एक तरीका प्रदान करते हैं। यह आपके गोदाम को फल या रस के बारे में कुछ भी जानने के लिए आपके गोदाम की आवश्यकता के बिना IFruitFactoryया तो एक या एक होने की अनुमति देता है IJuiceFactory


5
@SPI मुझे लगता है कि आप मुझे गलत समझ रहे हैं; फैक्टरी को खुद को लागू करने की आवश्यकता नहीं है IFruit- यह उन चीजों को तुरंत लागू करता है जो लागू करते हैं IFruit। बेशक, यह उन चीजों के उदाहरणों का उत्पादन करने की आवश्यकता नहीं है जो एक विशेष इंटरफ़ेस को लागू करते हैं, लेकिन यह शायद एक कोड गंध है यदि आपके पास एक कारखाना है जो उन चीजों का उत्पादन करता है जो एक दूसरे से पूरी तरह से असंबंधित हैं।
जॉन फेमिनाला

75
फैक्ट्री बनाने वाली फैक्ट्री। हमें डीपर जाने की जरूरत है ...
पॉल एनेकोव

11
इससे ज्यादा गलत कभी कुछ नहीं सुना। आप एक कारखाने को क्या कहेंगे जो अमूर्त कारखानों (IAbstractFactory) के इंटरफेस का उत्पादन करता है? - आह मैं देख रहा हूँ, कि AbstractAbstractFactory होगा ...
Tengiz

3
@joaquin उदाहरण के लिए, जब आपके पास IFruitFactory का कारखाना होना चाहिए। और जैसा कि मैंने पहले ही उल्लेख किया है, यह पूरी तरह से गलत है, और यह केवल पैटर्न के बारे में भ्रम का परिणाम है। नीचे मेरा जवाब स्पष्ट करता है - एब्सट्रैक्ट फैक्ट्री पैटर्न है, फिर फैक्ट्री मेथड पैटर्न है, और फिर भ्रमित लोग हैं जो सोचते हैं कि एब्सट्रैक्ट फैक्ट्री का मतलब अन्य फैक्ट्रियों का कारखाना है। फैक्ट्री केवल एक सामान्य शब्द है जिसका उपयोग मौजूदा पैटर्न में से किसी को दर्शाने के लिए किया जाता है। यदि आवश्यक हो तो अधिक विवरण के लिए नीचे मेरा जवाब देखें।
तेंगिज

9
यह इसका जवाब सिर्फ सादा गलत है! इस GoF पुस्तक के अनुसार , एक अमूर्त कारखाना एक कारखाना वस्तु है जो एक कारखाने के इंटरफ़ेस को लागू करता है, ताकि कंक्रीट कारखाने को दूसरे उपवर्ग के लिए स्वैप किया जा सके। इसका कारखानों को बनाने से कोई लेना-देना नहीं है । कृपया इस उत्तर को हटा दें, यह लोगों को भ्रमित और भ्रमित कर रहा है!
Lii

142

इस जानकारी के लिए स्रोत: http://java.dzone.com/news/intro-design-patterns-abstract

एब्सट्रैक्ट फैक्ट्री बनाम फैक्ट्री विधि

एक सार कारखाने के तरीकों को कारखाने के तरीकों के रूप में लागू किया जाता है। एब्सट्रैक्ट फैक्ट्री पैटर्न और फैक्ट्री मेथड पैटर्न दोनों ही अमूर्त प्रकारों और कारखानों के माध्यम से वास्तविक क्रियान्वयन वर्गों से ग्राहक प्रणाली को डिकॉय करते हैं। फैक्ट्री मेथड इनहेरिटेंस के माध्यम से ऑब्जेक्ट बनाता है जहां एब्सट्रैक्ट फ़ैक्टरी रचना के माध्यम से ऑब्जेक्ट बनाता है।

एब्सट्रैक्ट फैक्ट्री पैटर्न में एब्सट्रैक्ट, कंक्रीटफैक्टरी, एब्सट्रैक्टप्रोडक्ट, कंक्रीटप्रोडक्ट और क्लाइंट होते हैं।

कैसे लागू करें?

एब्सट्रैक्ट फ़ैक्टरी पैटर्न को फ़ैक्टरी विधि पैटर्न, प्रोटोटाइप पैटर्न या सिंगलटन पैटर्न का उपयोग करके लागू किया जा सकता है। कंक्रीटफैक्टिव ऑब्जेक्ट को सिंगलटन के रूप में लागू किया जा सकता है क्योंकि कंक्रीटफैक्टिव ऑब्जेक्ट की केवल एक आवृत्ति की आवश्यकता है।

फैक्ट्री मेथड पैटर्न एब्सट्रैक्ट फैक्ट्री पैटर्न का सरलीकृत संस्करण है। फैक्ट्री मेथड पैटर्न उन उत्पादों को बनाने के लिए जिम्मेदार है जो एक परिवार से संबंधित हैं, जबकि एब्सट्रैक्ट फैक्ट्री पैटर्न उत्पादों के कई परिवारों से संबंधित है।

फैक्ट्री विधि जनरेटर वर्ग और परिणामी उत्पादों से ग्राहक को अलग करने के लिए इंटरफेस और अमूर्त कक्षाओं का उपयोग करती है। एब्सट्रैक्ट फैक्ट्री में एक जनरेटर होता है जो कई फैक्ट्री विधियों के लिए एक कंटेनर होता है, साथ ही जेनरेटर और उत्पादों से क्लाइंट को डिकॉय करने वाले इंटरफेस के साथ।

फैक्टरी विधि पैटर्न का उपयोग कब करें

फैक्ट्री मेथड पैटर्न का उपयोग करें जब किसी विशेष उत्पाद से क्लाइंट को डिकम्प्लस करने की आवश्यकता होती है जो इसका उपयोग करता है। किसी उत्पाद के इंस्टेंस को बनाने और कॉन्फ़िगर करने के लिए ज़िम्मेदारी के एक ग्राहक को राहत देने के लिए फ़ैक्टरी विधि का उपयोग करें।

जब सार फैक्टरी पैटर्न का उपयोग करें

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

उदाहरण:

सार फैक्टरी उदाहरण 1

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

सार फैक्टरी उदाहरण 2:

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

फैक्टरी विधि उदाहरण:

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


6
एक्सट्रूज़न एब्सट्रैक्ट फ़ैक्टरी और फ़ैक्टरी विधि के लिए धन्यवाद। मुझे समझ में नहीं आया कि हम वस्तुओं के निर्माण के लिए अमूर्त कारखाने में रचना का उपयोग कहाँ करते हैं और कहाँ हम कारखाने के तरीके में विरासत का उपयोग करते हैं। यदि आप इन्हें समझाने के लिए कुछ कोड पोस्ट करते हैं तो यह बहुत उपयोगी होगा। आपका बहुत बहुत धन्यवाद। अपने कोड की प्रतीक्षा कर रहा है एक बार फिर धन्यवाद।
हर्ष

यहां भी, यह बहुत अधिक स्पष्ट होगा यदि रचना और विरासत के दृष्टिकोण को एक संक्षिप्त उदाहरण (स्रोत कोड) के साथ दिखाया गया है।
आकाश


संरचना उदाहरण: सार्वजनिक वर्ग क्लाइंट {AbstractProduct उत्पाद; Abstract उत्पादउत्पाद सहायक उपकरण; सार्वजनिक ग्राहक (अमूर्त कारखाना) {AbstractProduct उत्पाद = factory.createProduct (); } public void run () {product.print (); सहायक उपकरण = उत्पाद। असफलताएं (); }}
असीम गफ्फार

क्या यह पता लगाना संभव है कि इस दो पैटर्न में से किस कोड का उपयोग किया गया था?
वॉल्क

98

फैक्टरी पैटर्न: कारखाना आईपी-कार्यान्वयन का उत्पादन करता है

एब्सट्रैक्ट फैक्ट्री पैटर्न: एक फैक्ट्री-फैक्ट्री इफ़ेक्ट्रीज़ का उत्पादन करती है, जो बदले में आईपोड्र्स का उत्पादन करती है :)

[टिप्पणियों के अनुसार अपडेट करें]
जो मैंने पहले लिखा था वह कम से कम विकिपीडिया के अनुसार सही नहीं है । एक अमूर्त कारखाना बस एक कारखाना इंटरफ़ेस है। इसके साथ, आप अपने कारखानों को रनटाइम पर स्विच कर सकते हैं, विभिन्न कारखानों को विभिन्न संदर्भों में अनुमति दे सकते हैं। उदाहरण विभिन्न OS'es, SQL प्रदाताओं, मिडलवेयर-ड्राइवरों आदि के लिए अलग-अलग कारखाने हो सकते हैं।


4
अच्छा! क्या यह कहना सही है कि एब्सट्रैक्ट फैक्ट्री फैक्ट्री मेथड्स का एक सेट है?
वॉल्क

2
मुझे लगता है कि यह सही होगा, लेकिन यह बिंदु भी याद करेगा :) एक गैर-अनुरूप उदाहरण एक FileFactory हो सकता है जिसमें CreateBitmapFile () या CreateTextFile () जैसे तरीके थे। अब, आप उस कारखाने को किसी प्रकार की सेवा में भेजेंगे। लेकिन क्या होगा जब आप अपनी सेवा का परीक्षण करना चाहते हैं? फ़ाइल सिस्टम तक पहुँच को समाप्त करने के लिए, आपको एक IFileFactory इंटरफ़ेस बनाना होगा। अब, वास्तविक दुनिया में, आपके पास शायद एक DI / IoC ढांचा होगा जो आपकी आवश्यकताओं के आधार पर IFileFactories को तुरंत रोक देगा। इस मामले में IoC ढांचा अमूर्त कारखाने के रूप में काम करेगा।
cwap

5
यदि मैं सही ढंग से समझ रहा हूं, तो यह उत्तर प्रतीत होता है कि एब्सट्रैक्ट फैक्ट्री हमेशा आगे की इफ़ेक्ट्रीज़ का उत्पादन करती है, जिसका उपयोग उत्पादकों को बनाने के लिए किया जा सकता है। GoF में प्रस्तुति इस का समर्थन करने के लिए मुझे दिखाई नहीं देती है, और वास्तव में इसका विरोधाभास करती है: एक सार फैक्ट्री का एक उदाहरण सीधे IProducts का उत्पादन करता है। दूसरे शब्दों में, एक गोफ़ एब्सट्रैक्ट फ़ैक्टरी एक "फ़ैक्टरी-फ़ैक्टरी" नहीं है (या बल्कि, ज़रूरत नहीं है )।
SSJ_GZ

1
एब्सट्रैक्ट फ़ैक्टरी पैटर्न की परिभाषा गलत है। एक सार कारखाने में एक या एक से अधिक कारखाने विधियाँ होती हैं, प्रत्येक एक ही वस्तु परिवार से एक उदाहरण उत्पन्न करती हैं (ऑब्जेक्ट पदानुक्रम के साथ भ्रमित नहीं होना)। जबकि एक अमूर्त कारखाना कारखानों का एक कारखाना हो सकता है, यह एक होना जरूरी नहीं है। यह संबंधित उत्पादों का निर्माता है।
गिद्दीउपोरसी

1
यह इसका जवाब सिर्फ सादा गलत है! इस GoF पुस्तक के अनुसार , एक अमूर्त कारखाना एक कारखाना वस्तु है जो एक कारखाने के इंटरफ़ेस को लागू करता है, ताकि कंक्रीट कारखाने को दूसरे उपवर्ग के लिए स्वैप किया जा सके। इसका कारखानों को बनाने से कोई लेना-देना नहीं है । कृपया इस उत्तर को हटा दें, यह लोगों को भ्रमित और भ्रमित कर रहा है!
Lii

42

सार फैक्टरी पैटर्न

  • संबंधित या आश्रित वस्तुओं के परिवारों को उनके ठोस वर्गों को निर्दिष्ट किए बिना बनाने के लिए एक इंटरफ़ेस प्रदान करें।

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

  • दरअसल, प्रत्यायोजित वस्तु अक्सर तात्कालिकता प्रदर्शन करने के लिए कारखाने के तरीकों का उपयोग करती है!

फैक्टरी पैटर्न

  • फैक्टरी पैटर्न रचनात्मक पैटर्न के उदाहरण हैं

  • सृजनात्मक प्रतिमान वस्तु तात्कालिकता प्रक्रिया को अमूर्त करते हैं। वे छिपाते हैं कि वस्तुओं को कैसे बनाया जाता है और समग्र प्रणाली को स्वतंत्र बनाने में मदद करता है कि इसकी वस्तुएं कैसे बनाई और बनाई जाती हैं।

  • क्लास क्रिएशनल पैटर्न ऑब्जेक्ट को तत्काल फैक्टरी विधि तय करने के लिए वंशानुक्रम के उपयोग पर ध्यान केंद्रित करते हैं

  • ऑब्जेक्ट क्रिएशनल पैटर्न एक और ऑब्जेक्ट एब्सट्रैक्ट फैक्ट्री के लिए तात्कालिकता के प्रतिनिधिमंडल पर ध्यान केंद्रित करता है

संदर्भ: फैक्टरी बनाम सार कारखाना


3
संदर्भ लिंक मर चुका है
mkobit

39

फैक्ट्री विधि: आपके पास एक फैक्ट्री है जो एक विशेष बेस क्लास से प्राप्त होने वाली वस्तुओं का निर्माण करती है

सार कारखाना: आपके पास एक कारखाना है जो अन्य कारखानों का निर्माण करता है , और ये कारखाने आधार कक्षाओं से प्राप्त वस्तुओं को बनाते हैं। आप ऐसा इसलिए करते हैं क्योंकि आप अक्सर केवल एक ऑब्जेक्ट (फ़ैक्टरी विधि के साथ) नहीं बनाना चाहते हैं - बल्कि, आप संबंधित ऑब्जेक्ट्स का एक संग्रह बनाना चाहते हैं।


6
यह स्वीकृत उत्तर का डुप्लिकेट है, और उतना ही गलत है।
jaco0646

36

सार फैक्ट्री संबंधित वस्तुओं को बनाने के लिए एक इंटरफ़ेस है लेकिन फ़ैक्टरी विधि एक विधि है। सार कारखाना कारखाना विधि द्वारा कार्यान्वित किया जाता है।

यहाँ छवि विवरण दर्ज करें


36

मूल अंतर:

फैक्टरी: ग्राहक के लिए तात्कालिकता तर्क को उजागर किए बिना वस्तुओं को बनाता है।

फैक्ट्री मेथड : किसी ऑब्जेक्ट को बनाने के लिए एक इंटरफेस को परिभाषित करें, लेकिन उपवर्गों को यह तय करने दें कि कौन सी क्लास को तत्काल करना है। फैक्टरी विधि उपवर्गों के लिए एक वर्ग आक्षेप को स्थगित करने देती है

सार फैक्टरी : संबंधित या आश्रित वस्तुओं के परिवारों को उनके ठोस वर्गों को निर्दिष्ट किए बिना बनाने के लिए एक इंटरफ़ेस प्रदान करता है।

एब्सट्रैक्ट पैटर्न किसी अन्य वर्ग को ऑब्जेक्ट बनाने की जिम्मेदारी सौंपने के लिए कंपोजीशन का उपयोग करता है जबकि फैक्ट्री विधि पैटर्न इनहेरिटेंस का उपयोग करता है और ऑब्जेक्ट बनाने के लिए व्युत्पन्न वर्ग या उप वर्ग पर निर्भर करता है

से oodesign लेख:

फैक्टरी वर्ग आरेख:

यहाँ छवि विवरण दर्ज करें

उदाहरण: स्थैतिक

 public class ShapeFactory {

   //use getShape method to get object of type shape 
   public static Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }     
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();

      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();

      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }

      return null;
   }
}

गैर-स्टेटिक फैक्ट्री को लागू करने वाले FactoryMethod उदाहरण इस पोस्ट में उपलब्ध है:

डिजाइन पैटर्न: फैक्टरी बनाम फैक्टरी विधि बनाम सार फैक्टरी

कब इस्तेमाल करें: क्लाइंट को बस एक क्लास की जरूरत होती है और उसे इस बात की परवाह नहीं होती है कि उसे कौन सा ठोस कार्यान्वयन मिल रहा है।

फैक्टरी विधि वर्ग digaram:

यहाँ छवि विवरण दर्ज करें

उपयोग कब करें: क्लाइंट को यह पता नहीं होता है कि रनटाइम के दौरान इसे बनाने के लिए किन ठोस वर्गों की आवश्यकता होगी, लेकिन बस एक वर्ग प्राप्त करना चाहता है जो काम करेगा।

डीज़ोन से एब्सट्रैक्ट फ़ैक्टरी क्लास आरेख

यहाँ छवि विवरण दर्ज करें

कब उपयोग करें: जब आपके सिस्टम को उत्पादों के कई परिवार बनाने हैं या आप कार्यान्वयन विवरणों को उजागर किए बिना उत्पादों का एक पुस्तकालय प्रदान करना चाहते हैं।

उपरोक्त लेखों में स्रोत कोड उदाहरण अवधारणाओं को स्पष्ट रूप से समझने के लिए बहुत अच्छे हैं।

कोड उदाहरण के साथ संबंधित एसई प्रश्न:

फैक्टरी पैटर्न। कारखाने के तरीकों का उपयोग कब करें?

अंतर:

  1. एब्सट्रैक्ट फैक्ट्री क्लासेस को अक्सर फैक्ट्री मेथड्स के साथ लागू किया जाता है, लेकिन इन्हें प्रोटोटाइप का उपयोग करके भी लागू किया जा सकता है
  2. डिजाइन फैक्ट्री मेथड (कम जटिल, अधिक अनुकूलन योग्य, उपवर्ग प्रोलिफ़रेट) का उपयोग करके शुरू करते हैं और अन्य रचनात्मक पैटर्न (अधिक लचीला, अधिक जटिल) की ओर विकसित होते हैं जहां अधिक लचीलेपन की आवश्यकता होती है।
  3. फैक्ट्री मेथड्स को आमतौर पर टेम्प्लेट मेथड के भीतर कहा जाता है।

अन्य उपयोगी लेख:

sourcemaking से factory_method

abstract_factory sourcemaking से

सार-कारखाने में डिजाइन पैटर्न journaldev से


21

उदाहरण / सार फैक्ट्री के लिए परिदृश्य

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

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

अब मैं आसानी से एक ऑनलाइन स्टोर पर विचार कर सकता हूं जो अपने कई ग्राहकों को सेवाएं प्रदान करता है। प्रत्येक ग्राहक तीन समूहों में से एक से संबंधित है। जब एक प्रीमियम समूह उपयोगकर्ता साइट खोलता है तो उसे बढ़िया यूआई, अत्यधिक अनुकूलित विज्ञापन फलक, मेनू में अधिक विकल्प आदि मिलते हैं। इन्हीं सुविधाओं के सेट को गोल्ड उपयोगकर्ता के लिए प्रस्तुत किया जाता है, लेकिन मेनू में कार्यक्षमता कम होती है, विज्ञापन अधिकतर रीलेवेंट होते हैं, और थोड़े कम अहंकारी यूआई। लास्ट मेरी तरह का यूजर है, एक 'फ्री ग्रुप' यूजर है। मुझे बस इतना परोसा जाता है कि मुझे बुरा न लगे। यूआई एक नंगे न्यूनतम है, विज्ञापन इस तरह से ट्रैक किए जाते हैं कि मुझे नहीं पता कि इसमें क्या आता है, आखिरकार मेनू को लॉग आउट किया गया है।

अगर मुझे इस वेबसाइट की तरह कुछ बनाने का मौका मिला तो मैं निश्चित रूप से एब्सट्रैक्ट फैक्ट्री पैटर्न पर विचार करूंगा।

सार उत्पाद: विज्ञापन फलक, मेनू, UI चित्रकार।
एब्सट्रैक्ट फैक्ट्री: वेब स्टोर यूजर एक्सपीरियंस
कंसीलर फैक्ट्री: प्रीमियम यूजर एक्सपीरियंस, गोल्ड यूजर एक्सपीरियंस, जनरल यूजर एक्सपीरियंस।


एब्सट्रैक्ट का अच्छा परिदृश्य लेकिन आपने वास्तव में इस सवाल का जवाब नहीं दिया कि कारखाने और अमूर्त कारखाने के बीच अंतर क्या है।
एडेलिन

20

कई लोगों को शायद आश्चर्य होगा, लेकिन यह सवाल गलत है । यदि आप एक साक्षात्कार के दौरान यह प्रश्न सुनते हैं, तो आपको साक्षात्कारकर्ता को यह समझने में मदद करने की आवश्यकता है कि भ्रम कहां है।

आइए इस तथ्य से शुरू करें कि कोई ठोस पैटर्न नहीं है जिसे सिर्फ "फैक्टरी" कहा जाता है। पैटर्न है जिसे "एब्सट्रैक्ट फैक्ट्री" कहा जाता है, और एक पैटर्न है जिसे "फ़ैक्टरी विधि" कहा जाता है।

तो, "फैक्टरी" का क्या मतलब है? निम्नलिखित में से एक (संदर्भ के दायरे के आधार पर सभी को सही माना जा सकता है):

  • कुछ लोग इसे " एब्सट्रैक्ट फैक्ट्री " के लिए एक उपनाम (शॉर्टकट) के रूप में उपयोग करते हैं ।
  • कुछ लोग इसे " फैक्टरी विधि " के लिए एक उपनाम (शॉर्टकट) के रूप में उपयोग करते हैं ।
  • कुछ लोग इसे सभी कारखाने / रचनात्मक पैटर्न के लिए एक अधिक सामान्य नाम के रूप में उपयोग करते हैं। उदाहरण के लिए "एब्सट्रैक्ट फैक्ट्री" और "फैक्ट्री मेथड" दोनों ही फैक्ट्रीज हैं।

और, दुर्भाग्य से , कई लोग "फैक्टरी" का उपयोग दूसरे प्रकार के कारखाने को निरूपित करने के लिए करते हैं, जो कारखाने या कारखानों (या उनके इंटरफेस) का निर्माण करता है। उनके सिद्धांत के आधार पर:

उत्पाद लागू करता है IProduct, जिसे फैक्ट्री द्वारा बनाया गया है, जो IFactory को लागू करता है, जो AbstractFactory द्वारा बनाया गया है।

यह समझने के लिए कि यह कितना मूर्खतापूर्ण है, चलो अपना समीकरण जारी रखें:

एसेन्सेफ्ट इम्प्लीमेंट्स IAbstractFactory, जो कि द्वारा बनाया गया है ... AbstractAbstractFactory ???

मुझे आशा है कि आप इस बिंदु को देखेंगे। भ्रमित मत हो, और कृपया उन चीजों का आविष्कार न करें जो कारण के लिए मौजूद नहीं हैं।

-

पुनश्च : उत्पादों के लिए फैक्ट्री एब्सट्रैक्ट फैक्ट्री है, और एब्सट्रैक्ट फैक्ट्रीज के लिए फैक्ट्री एसेंसफैक्ट्री का एक और उदाहरण है।


मैं कैसे AbstractFactory को अलग कर सकता हूं जो AbstractFactories से अन्य AbstractFactories बनाता है, जो विशिष्ट ऑब्जेक्ट बनाता है? GenericAbstractFactory? या AbstractFactoryFactory?
एंड्रयू

डिजाइन पैटर्न में ऐसी कोई चीज नहीं है। ये दोनों एब्सट्रैक्ट पैटर्न के उदाहरण हैं। तो, एक AbstractFactory विशिष्ट वस्तुओं का निर्माण करता है, और दूसरा AbstractFactory कारखानों का निर्माण करता है (जो फिर से AbstractFactory हैं)।
टेंगिज

ज़रूर। तो मैं इन वर्गों को कैसे नाम दूं, जो अलग-अलग चीजें करते हैं? क्योंकि अन्य कारखाने बनाना और अन्य (सरल) वस्तुएं बनाना दो अलग-अलग चीजें हैं। मुझे पैटर्न की परवाह नहीं है, मुझे पठनीय कोड की आवश्यकता है।
एंड्रयू

3
पठनीय कोड आशय का खुलासा कोड है। जब नामकरण कक्षाएं आपको बहुत अधिक पैटर्न का उल्लेख नहीं करना चाहिए, जब तक कि बहुत आवश्यक न हो। उदाहरण के लिए यदि आपके पास एक अमूर्त कारखाना है जो अलग-अलग ट्रांसपोर्ट बनाता है, तो शायद इसे TransportCreator या TransportFactory कहें, या शायद ट्रांसपोर्ट मैनेजर भी। और फिर, यदि आपके पास इन कारखानों का कारखाना है, तो आप इसे जो कुछ भी कह सकते हैं - जो भी नए निर्माता खोलते हैं। शायद कि निर्माता हो सकता है? मूल रूप से, चीजों को नाम दें जैसा कि आपके व्यवसाय ने उन्हें कॉल किया, और न कि वे किन पैटर्नों को लागू करते हैं, उनके आधार पर।
तेंगिज

16
//Abstract factory - Provides interface to create factory of related products
interface PizzaIngredientsFactory{    
   public Dough createDough(); //Will return you family of Dough
   public Clam createClam();   //Will return you family of Clam
   public Sauce createSauce(); //Will return you family of Sauce
}

class NYPizzaIngredientsFactory implements PizzaIngredientsFactory{

   @Override
   public Dough createDough(){
      //create the concrete dough instance that NY uses
      return doughInstance;
   }

   //override other methods
} 

पाठ्य पुस्तक की परिभाषाएं पहले से ही अन्य उत्तरों द्वारा प्रदान की जाती हैं। मैंने सोचा कि मैं इसका एक उदाहरण भी दूंगा।

तो यहाँ PizzaIngredientsFactoryएक सार कारखाना है क्योंकि यह संबंधित उत्पादों के परिवार बनाने के लिए तरीके प्रदान करता है।

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

फैक्टरी विधि

ठोस कार्यान्वयन का उदाहरण देता है

उदाहरण में:
- createDough()- आटा के लिए ठोस कार्यान्वयन प्रदान करता है। तो यह एक फैक्ट्री विधि है

सार कारखाना

संबंधित वस्तुओं के परिवार बनाने के लिए इंटरफ़ेस प्रदान करता है

उदाहरण में:
- PizzaIngredientsFactoryएक सार कारखाने के रूप में यह वस्तुओं की तरह एक संबंधित सेट बनाने के लिए अनुमति देता है Dough, Clams, Sauce। वस्तुओं के प्रत्येक परिवार को बनाने के लिए यह एक कारखाना विधि प्रदान करता है।

हेड फर्स्ट डिज़ाइन पैटर्न से उदाहरण


5

मेरे पास जॉन के जवाब के साथ योगदान करने के लिए कुछ बिंदु हैं:

सार कारखाना कारखानों का कारखाना है!

"फ़ैक्टरी विधि" (क्योंकि सिर्फ "फ़ैक्टरी" अस्पष्ट है) के साथ, आप एक विशेष इंटरफ़ेस के कार्यान्वयन ( Lemonऔर Orange, आदि) का उत्पादन करते हैं - कहते हैं IFruit,। यह कारखाना कहा जा सकता है CitricFruitFactory

लेकिन अब आप एक और प्रकार का फल बनाना चाहते हैं जो CitricFruitFactory नहीं बना पा रहा है। हो सकता है कि CitricFruitFactoryयदि आप Strawberryइसे बनाते हैं (स्ट्रॉबेरी एक साइट्रिक फल नहीं है!) तो कोड का कोई मतलब नहीं होगा ।

तो आप एक नई फैक्ट्री बना सकते हैं , RedFruitFactoryजिसका निर्माण होता है , आदि।StrawberryRaspberry

जैसे जॉन फेमिनेला ने कहा: "एब्सट्रैक्ट फैक्ट्री पैटर्न के साथ, आप एक विशेष फैक्ट्री इंटरफ़ेस के कार्यान्वयन का उत्पादन करते हैं - उदाहरण के लिए, IFruitFactoryउनमें से प्रत्येक को पता है कि विभिन्न प्रकार के फल कैसे बनाए जाते हैं।"

की implementatios यही IFruitFactoryकर रहे हैं CitricFruitFactoryऔर RedFruitFactory!


4

मेरे स्रोत हैं: StackOverflow, tutorialspoint.com, programmers.stackexchange.comऔर CodeProject.com


Factory Method(यह भी कहा जाता है Factory) एक Interfaceकार्यान्वयन के डिकॉउल क्लाइंट के लिए है। नमूना के लिए हमारे पास Shapeदो Circleऔर Squareकार्यान्वयन के साथ एक इंटरफ़ेस है। हमने एक फैक्ट्री विधि के साथ एक फैक्ट्री विधि को परिभाषित किया है जैसे कि एक निर्धारक पैरामीटर Typeऔर Shapeइंटरफ़ेस के नए संबंधित कार्यान्वयन के साथ ।


Abstract Factoryकई फ़ैक्टरी विधियों या कई फ़ैक्टरी कार्यान्वयन द्वारा फ़ैक्टरी इंटरफ़ेस होता है। अगले उपरोक्त नमूने के लिए हमारे पास Colorदो Redऔर Yellowकार्यान्वयन के साथ एक इंटरफ़ेस है। हमने ShapeColorFactoryदो RedCircleFactoryऔर के साथ एक इंटरफ़ेस परिभाषित किया है YellowSquareFactory। इस अवधारणा को समझाने के लिए निम्नलिखित कोड:

interface ShapeColorFactory
{
    public Shape getShape();
    public Color getColor();
}

class RedCircleFactory implements ShapeColorFactory
{
    @Override
    public Shape getShape() {
        return new Circle();
    }

    @Override
    public Color getColor() {
        return new Red();
    }
}
class YellowSquareFactory implements ShapeColorFactory
{
    @Override
    public Shape getShape() {
        return new Square();
    }

    @Override
    public Color getColor() {
        return new Yellow();
    }
} 

यहाँ FactoryMethodऔर के बीच अंतर AbstractFactoryFactory Methodके रूप में बस एक अंतरफलक के एक ठोस वर्ग पर Abstract Factoryलौटने के रूप में factory of factory। दूसरे शब्दों Abstract Factoryमें इंटरफ़ेस की एक श्रृंखला के विभिन्न संयोजन लौटाते हैं।


मुझे आशा है कि मेरी व्याख्या उपयोगी है।


3

उन कारखानों में मुख्य अंतर यह है कि आप कारखानों के साथ क्या करना चाहते हैं और जब आप इसका उपयोग करना चाहते हैं।

कभी-कभी, जब आप IOC कर रहे होते हैं (नियंत्रण का उल्टा जैसे कंस्ट्रक्टर इंजेक्शन), तो आप जानते हैं कि आप ठोस ऑब्जेक्ट बना सकते हैं। जैसा कि फलों के ऊपर उदाहरण में बताया गया है, यदि आप फलों की वस्तुओं को बनाने के लिए तैयार हैं, तो आप साधारण फैक्ट्री पैटर्न का उपयोग कर सकते हैं ।

लेकिन कई बार, आप ठोस वस्तुओं का निर्माण नहीं करना चाहते हैं, वे बाद में कार्यक्रम के प्रवाह में आएंगे। लेकिन कॉन्फ़िगरेशन आपको बताता है कि आप किस तरह का कारखाना शुरू में उपयोग करना चाहते हैं, वस्तुओं को बनाने के बजाय, आप उन कारखानों पर गुजर सकते हैं जो एक सामान्य कारखाने वर्ग से आईओसी में निर्माणकर्ता तक प्राप्त होते हैं।

इसलिए, मुझे लगता है कि इसका उद्देश्य जीवनकाल और निर्माण के बारे में भी है।


3

दोनों Factory Methodऔर Abstract Factoryग्राहकों को कंक्रीट के प्रकारों से विमुख रखते हैं। दोनों वस्तुओं का निर्माण करते हैं, लेकिन Factoryविधि Abstract Factoryसंरचना का उपयोग करते समय वंशानुक्रम का उपयोग करती है।

Factory Methodठोस वस्तुओं (उत्पाद) बनाने के लिए उपवर्गों में विरासत में मिला है, जबकि Abstract Factoryसंबंधित उत्पादों और इन इंटरफेस के उपवर्ग के परिवार बनाने के लिए इंटरफेस प्रदान संबंधित उत्पादों को बनाने के लिए कैसे परिभाषित करते हैं।

फिर इन उपवर्गों को जब तात्कालिक रूप से उत्पाद वर्गों में पारित किया जाता है, जहां इसे अमूर्त प्रकार के रूप में उपयोग किया जाता है। में संबंधित उत्पादों का Abstract Factoryउपयोग कर अक्सर लागू किया जाता है Factory Method


3

जॉन फेमिनाला जवाब का विस्तार:

Apple, Banana, Cherryऔजार FruitFactoryऔर कहा कि एक विधि कहा जाता है Createजो एप्पल या केले या चेरी बनाने की पूरी तरह जिम्मेदार है। आप अपनी Factoryविधि से काम कर रहे हैं।

अब, आप Createअपने फलों में से एक विशेष सलाद चाहते हैं और वहां आपका एब्सट्रैक्ट फैक्ट्री आता है । एब्सट्रैक्ट फैक्ट्री यह जानती है कि एप्पल, केला और चेरी से अपने विशेष सलाद को कैसे बनाया जाए।

public class Apple implements Fruit, FruitFactory {
    public Fruit Create() {
        // Apple creation logic goes here
    }
}

public class Banana implements Fruit, FruitFactory {
    public Fruit Create() {
        // Banana creation logic goes here
    }
}

public class Cherry implements Fruit, FruitFactory {
    public Fruit Create() {
        // Cherry creation logic goes here
    }
}

public class SpecialSalad implements Salad, SaladFactory {
    public static Salad Create(FruitFactory[] fruits) {
        // loop through the factory and create the fruits.
        // then you're ready to cut and slice your fruits 
        // to create your special salad.
    }
}

2

परिभाषा के अनुसार हम दो के अंतरों को बाहर निकाल सकते हैं:

फैक्टरी: एक इंटरफ़ेस का उपयोग किसी ऑब्जेक्ट को बनाने के लिए किया जाता है, लेकिन उपवर्ग यह तय करता है कि किस वर्ग को तुरंत दिया जाए। आवश्यकता पड़ने पर वस्तु का निर्माण किया जाता है।

एब्सट्रैक्ट फैक्ट्री: एब्सट्रैक्ट फैक्ट्री पैटर्न एक सुपर-फैक्ट्री के रूप में कार्य करता है जो अन्य फैक्ट्रियों का निर्माण करता है। एब्सट्रैक्ट फैक्ट्री पैटर्न में एक इंटरफ़ेस संबंधित वस्तुओं का एक सेट बनाने के लिए या उनके ठोस वर्गों को निर्दिष्ट किए बिना निर्भर वस्तुओं के लिए जिम्मेदार है।

इसलिए, ऊपर की परिभाषाओं में हम एक विशेष अंतर पर जोर दे सकते हैं। यानी, फैक्ट्री पैटर्न ऑब्जेक्ट बनाने के लिए जिम्मेदार है और एब्सट्रैक्ट फैक्ट्री संबंधित वस्तुओं का एक सेट बनाने के लिए जिम्मेदार है; स्पष्ट रूप से दोनों एक इंटरफेस के माध्यम से।

फैक्टरी पैटर्न:

public interface IFactory{
  void VehicleType(string n);
 }

 public class Scooter : IFactory{
  public void VehicleType(string n){
   Console.WriteLine("Vehicle type: " + n);
  }
 }

 public class Bike : IFactory{
  public void VehicleType(string n) {
  Console.WriteLine("Vehicle type: " + n);
  }
 }

 public interface IVehicleFactory{
  IFactory GetVehicleType(string Vehicle);
 }

 public class ConcreteVehicleFactory : IVehicleFactory{
 public IFactory GetVehicleType(string Vehicle){
   switch (Vehicle){
    case "Scooter":
     return new Scooter();
    case "Bike":
     return new Bike();
    default:
    return new Scooter();
  }
 }

 class Program{
  static void Main(string[] args){
   IVehicleFactory factory = new ConcreteVehicleFactory();
   IFactory scooter = factory.GetVehicleType("Scooter");
   scooter.VehicleType("Scooter");

   IFactory bike = factory.GetVehicleType("Bike");
   bike.VehicleType("Bike");

   Console.ReadKey();
 }
}

सार फैक्टरी पैटर्न:

interface IVehicleFactory{
 IBike GetBike();
 IScooter GetScooter();
}

class HondaFactory : IVehicleFactory{
     public IBike GetBike(){
            return new FZS();
     }
     public IScooter GetScooter(){
            return new FZscooter();
     }
 }
class HeroFactory: IVehicleFactory{
      public IBike GetBike(){
            return new Pulsur();
     }
      public IScooter GetScooter(){
            return new PulsurScooter();
     }
}

interface IBike
    {
        string Name();
    }
interface IScooter
    {
        string Name();
    }

class FZS:IBike{
   public string Name(){
     return "FZS";
   }
}
class Pulsur:IBike{
   public string Name(){
     return "Pulsur";
   }
}

class FZscooter:IScooter {
  public string Name(){
     return "FZscooter";
   }
}

class PulsurScooter:IScooter{
  public string Name(){
     return "PulsurScooter";
   }
}

enum MANUFACTURERS
{
    HONDA,
    HERO
}

class VehicleTypeCheck{
        IBike bike;
        IScooter scooter;
        IVehicleFactory factory;
        MANUFACTURERS manu;

        public VehicleTypeCheck(MANUFACTURERS m){
            manu = m;
        }

        public void CheckProducts()
        {
            switch (manu){
                case MANUFACTURERS.HONDA:
                    factory = new HondaFactory();
                    break;
                case MANUFACTURERS.HERO:
                    factory = new HeroFactory();
                    break;
            }

      Console.WriteLine("Bike: " + factory.GetBike().Name() + "\nScooter: " +      factory.GetScooter().Name());
        }
  }

class Program
    {
        static void Main(string[] args)
        {
            VehicleTypeCheck chk = new VehicleTypeCheck(MANUFACTURERS.HONDA);
            chk.CheckProducts();

            chk= new VehicleTypeCheck(MANUFACTURERS.HERO);
            chk.CheckProducts();

            Console.Read();
        }
    }

1

यहां देखें: http://www.allapplabs.com/java_design_patterns/abstract_factory_pattern.htm ऐसा लगता है कि फैक्ट्री विधि एक विशेष वर्ग (सार नहीं) को आधार वर्ग के रूप में उपयोग करती है जबकि सार कारखाना इसके लिए एक सार वर्ग का उपयोग करता है। इसके अलावा अगर एब्स्ट्रैक्ट क्लास के बजाय इंटरफेस का उपयोग किया जाए तो परिणाम एब्सट्रैक्ट फैक्ट्री पैटर्न का एक अलग कार्यान्वयन होगा।

: डी


1

विभिन्न प्रकार के इंटरफेस बनाने के लिए सार फैक्टरी टेम्पलेट है। मान लें कि आपके पास ऐसी परियोजना है जिसके लिए आपको विभिन्न प्रकार की सीएसएसवी फाइलों को पार्स करने की आवश्यकता है, जैसे कि मात्रा, कीमत और आइटम की विशिष्ट जानकारी जैसे कुछ में चॉकलेट के बारे में अन्य फलों के बारे में डेटा होता है और फिर पार्स करने के बाद आपको उनके संबंधित डेटाबेस में इस जानकारी को अपडेट करने की आवश्यकता होती है ताकि अब आपके पास यह हो सके एक एब्सट्रैक्ट फैक्ट्री जो आपको पार्सर और मॉडिफायर फैक्ट्री लौटाती है और फिर यह पार्सर फैक्ट्री आपको चॉकलेट पार्सर ऑब्जेक्ट, फ्रूट पार्सर ऑब्जेक्ट इत्यादि लौटा सकती है और इसी तरह मॉडिफायर फैक्ट्री चॉकलेट मॉडिफायर ऑब्जेक्ट, फ्रूट मॉडिफायर ऑब्जेक्ट आदि लौटा सकती है।


1

मुझे लगता है कि हम Java8 उदाहरण कोड देखकर इन दोनों के बीच के अंतर को समझ सकते हैं:

  interface Something{}

  interface OneWhoCanProvideSomething {
     Something getSomething();
  }

  interface OneWhoCanProvideCreatorsOfSomething{
     OneWhoCanProvideSomething getCreator();
  }


public class AbstractFactoryExample {

    public static void main(String[] args) {
        //I need something
        //Let's create one
        Something something = new Something() {};

        //Or ask someone (FACTORY pattern)
        OneWhoCanProvideSomething oneWhoCanProvideSomethingOfTypeA = () -> null;
        OneWhoCanProvideSomething oneWhoCanProvideSomethingOfTypeB = () -> null;

        //Or ask someone who knows soemone who can create something (ABSTRACT FACTORY pattern)
        OneWhoCanProvideCreatorsOfSomething oneWhoCanProvideCreatorsOfSomething = () -> null;

        //Same thing, but you don't need to write you own interfaces
        Supplier<Something> supplierOfSomething = () -> null;
        Supplier<Supplier<Something>> supplierOfSupplier = () -> null;
    }

}

अब सवाल यह है कि निर्माण का कौन सा तरीका आपको उपयोग करना चाहिए और क्यों: पहला तरीका (कोई पैटर्न, सिर्फ सादा कंस्ट्रक्टर): अपने आप से बनाना एक अच्छा विचार नहीं है, आपको सभी काम करना होगा, और आपका क्लाइंट कोड से जुड़ा हुआ है विशेष कार्यान्वयन।

दूसरा तरीका (फ़ैक्टरी पैटर्न का उपयोग करते हुए): आपको वह लाभ प्रदान करता है जिसे आप किसी भी प्रकार के कार्यान्वयन से पारित कर सकते हैं, जो कुछ स्थिति के आधार पर विभिन्न प्रकार की चीज़ों को प्रदान कर सकता है (हो सकता है कि कोई पैरामीटर क्रिएशनल विधि से पारित हो)।

तीसरा तरीका (एब्सट्रैक्ट फैक्ट्री पैटर्न का उपयोग करके): यह आपको अधिक लचीलापन देता है। आप कुछ हालत के आधार पर (शायद एक पैरामीटर पारित) के आधार पर कुछ के विभिन्न प्रकार के रचनाकारों को पा सकते हैं।

ध्यान दें कि आप हमेशा दो स्थितियों को एक साथ जोड़कर फैक्ट्री पैटर्न से दूर हो सकते हैं (जो कोड जटिलता और युग्मन को थोड़ा बढ़ाता है), मुझे लगता है कि हम शायद ही कभी वास्तविक जीवन का उपयोग करते हैं एब्सट्रैक्ट फ़ैक्टरी पैटर्न के मामलों को देखते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.