design patterns - सार फैक्टरी, फैक्टरी विधि, बिल्डर




design-patterns language-agnostic (5)

मैंने फ़ैक्टरी विधि पैटर्न और बिल्डर पैटर्न की तुलना करने के लक्ष्य के साथ दूसरे दिन एक लेख लिखा था। आप इसे यहां पा सकते हैं: http://www.shenghua.co.uk/factory-method-vs-builder/ । उम्मीद है कि यह कुछ भी मदद कर सकता है।

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

ऐसा लगता है कि यह सवाल एक डुप्ली है, लेकिन कृपया मेरे साथ सहन करें - मैं वादा करता हूं कि मैंने संबंधित पोस्ट (और जीओएफ पुस्तक ) पढ़ ली है।

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

क्या आप एक साधारण उदाहरण प्रदान कर सकते हैं जहां आप स्पष्ट रूप से एक पैटर्न का उपयोग करेंगे, न कि दूसरों को?

मैं समझता हूं कि यह राय के मामले में उबाल सकता है अगर उदाहरण बहुत आसान है, लेकिन मुझे उम्मीद है कि यदि कोई भी कर सकता है, तो वह व्यक्ति SO में है।

धन्यवाद।


सार फैक्टरी पैटर्न अन्य वस्तुओं (गैर कारखानों) का उत्पादन करने के लिए उपclassing (कारखानों) का उपयोग करता है। सार फैक्ट्री यह भी बताती है कि उत्पादित वस्तुओं समानांतर पदानुक्रमों से संबंधित हैं (उदाहरण के लिए प्लेटफ़ॉर्म स्वतंत्रता को संभालने के लिए, प्रत्येक प्लेटफ़ॉर्म के लिए एक पदानुक्रम)।

बिल्डर पैटर्न "आउटपुट" उत्पन्न करने के लिए उप-वर्गीकरण का उपयोग करता है - जो आवश्यक रूप से ऑब्जेक्ट्स नहीं है । जीओएफ उदाहरण में बिल्डर का टेक्स्ट आउटपुट (मार्कअप या अन्यथा) उत्पादन होता है।

अन्य दो के विपरीत फैक्टरी विधि पैटर्न, "निर्माता" को एक अमूर्त और ठोस कार्यान्वयन में विभाजित करता है (इस प्रकार फ्रेमवर्क कार्यान्वयन से संबंधित इस पर जोर देता है)। सार फैक्ट्री की तरह, यह वास्तविक वस्तुओं को बनाने से संबंधित है।

सभी तीन बहुत समान हैं, क्योंकि वे सब subclassing का उपयोग करें। यह उप-वर्ग है जो उन सभी की उत्कृष्ट गुणवत्ता है, जो सूक्ष्म मतभेदों (ऊपर उल्लिखित) को छुपाता है और इस प्रकार कई लोगों को मतभेदों को देखने में कठिनाई होती है।


सार फैक्टरी, फैक्टरी विधि, बिल्डर : ये सभी पैटर्न रचनात्मक पैटर्न हैं, जो डिजाइन पैटर्न हैं जो वस्तु निर्माण तंत्र से निपटते हैं, जो स्थिति के लिए उपयुक्त तरीके से वस्तुओं को बनाने की कोशिश कर रहे हैं।

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

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

    मुख्य नोट: आप इन इंटरफेस का एक इंटरफ़ेस और विशिष्ट कार्यान्वयन बनाएंगे। फैक्टरी विधि में, शर्त के आधार पर, आपको सामान्य इंटरफ़ेस का ठोस कार्यान्वयन मिल जाएगा।

सार फैक्टरी:

  1. संबंधित या आश्रित वस्तुओं के परिवारों को उनके ठोस वर्ग निर्दिष्ट किए बिना एक इंटरफ़ेस प्रदान करें
  2. एक पदानुक्रम जो encapsulates: कई संभव "प्लेटफॉर्म" `, और" उत्पादों "के एक सूट का निर्माण
  3. सार फैक्ट्री कक्षाएं अक्सर फैक्ट्री विधियों के साथ कार्यान्वित की जाती हैं , लेकिन प्रोटोटाइप का उपयोग करके उन्हें भी कार्यान्वित किया जा सकता है

बिल्डर:

  1. बिल्डर पैटर्न सरल वस्तुओं का उपयोग करके और एक चरण-दर-चरण दृष्टिकोण का उपयोग करके एक जटिल वस्तु बनाता है
  2. इस परिदृश्य में फैक्टरी विधि / सार फैक्ट्री में प्रतिस्थापन : क्लाइंट प्रोग्राम से फैक्ट्री क्लास में पास करने के लिए बहुत सारे तर्क जो त्रुटि प्रवण हो सकते हैं
  3. कुछ पैरामीटर फैक्ट्री के विपरीत वैकल्पिक हो सकते हैं जो सभी मानकों को भेजने के लिए मजबूर करता है

जावा में बिल्डर डिजाइन पैटर्न के लिए दिशानिर्देश

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

संबंधित पोस्ट:

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

अलग वर्ग में धारक रखना (धाराप्रवाह इंटरफ़ेस)

उपयोगी कड़ियाँ:

sourcemaking डिजाइन-पैटर्न


निर्माता

// Builder encapsulates construction of other object. Building of the object can be done in multiple steps (methods)
public class ConfigurationBuilder
{
  // Each method adds some configuration part to internally created Configuration object
  void AddDbConfiguration(...);
  void AddSmtpConfiguration(...);
  void AddWebServicesConfiguration(...);
  void AddWebServerConfiguration(...);

  // Returns built configuration
  Configuration GetConfiguration();
}

फैक्टरी विधि

// Factory method is declared in base class or interface. Subclass defines what type is created by factory method.
public interface ICacheProvider
{
  ISession CreateCache(); // Don't have to return new instance each time - such decission is part of implementation in derived class.
}

public class InMemoryCacheProvider : ICacheProvider
{ ... }

public class DbStoredCacheProvider : ICacheProvider
{ ... }

// Client code
ICacheProvider provider = new InMemoryCacheProvider
ICache cache = provider.CreateCache(); 

सार फैक्टरी

// Abstract factory defines families of platform classes - you don't need to specify each platform class on the client.
public interface IDbPlatform
{
  // It basically defines many factory methods for related classes
  IDbConnection CreateConnection();
  IDbCommand CreateCommand();
  ...
}

// Abstract factory implementation - single class defines whole platform
public class OraclePlatfrom : IDbPlatform
{ ... }

public class MySqlPlatform : IDbPlatform
{ ... }

// Client code:
IDbPlatform platform = new OraclePlatform();
IConnection connection = platform.CreateConnection(); // Automatically Oracle related
...

  • फैक्टरी विधि पैटर्न - जब आप जटिल वस्तुओं के परिवार का निर्माण करना चाहते हैं।
  • ऑब्जेक्ट बिल्डर पैटर्न - जब आप उपयोगकर्ता को अपने ढांचे में अपने कस्टम कार्यान्वयन को प्लग करने की अनुमति देना चाहते हैं

अधिक जानकारी के लिए कृपया निम्नलिखित यूआरएल पर जाएं।

http://xeon2k.wordpress.com







factory-method