व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न · पाठ

एब्स्ट्रैक्ट फ़ैक्टरी और बिल्डर

संबंधित ऑब्जेक्ट के समूह बनाने के लिए एब्स्ट्रैक्ट फ़ैक्टरी और जटिल ऑब्जेक्ट को चरण-दर-चरण बनाने के लिए बिल्डर को समझें।

पाठ 2, कुल 4 में से11 चरण

एब्स्ट्रैक्ट फ़ैक्टरी और बिल्डर, CoddyKit पर व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

ऑब्जेक्ट निर्माण के पैटर्न

दो शक्तिशाली सृजनात्मक डिज़ाइन पैटर्न—Abstract Factory और Builder—पर इस पाठ में आपका स्वागत है।

ये पैटर्न ऑब्जेक्ट बनाने की जटिल प्रक्रिया को सँभालने में मदद करते हैं, जिससे हमारा कोड अधिक लचीला और आसानी से सँभाला जा सकने वाला बनता है।

आप सीखेंगे कि मज़बूत एप्लिकेशन बनाने के लिए प्रत्येक का उपयोग कब और कैसे करना है।

Abstract Factory: समस्या

कल्पना कीजिए कि आप ऐसा एप्लिकेशन बना रहे हैं जिसे अपने UI components के लिए अलग-अलग 'थीम' या 'ऑपरेटिंग सिस्टम' (जैसे Windows और macOS) का समर्थन करना है।

आपको संबंधित ऑब्जेक्ट्स का एक परिवार बनाना है—जैसे buttons, checkboxes और text fields—जो सभी किसी एक विशेष थीम से संबंधित हों।

बिना उन्हें कोड में सीधे लिखे, आप यह कैसे सुनिश्चित करेंगे कि चुनी गई थीम के लिए हमेशा components का सही समूह बनाया जाए?

Abstract Factory: समाधान

Abstract Factory pattern संबंधित या परस्पर निर्भर ऑब्जेक्ट्स के परिवार बनाने के लिए एक interface प्रदान करता है, बिना उनकी ठोस classes निर्दिष्ट किए।

  • यह एक Abstract Factory (एक interface) परिभाषित करता है, जिसमें प्रत्येक उत्पाद प्रकार को बनाने के लिए methods होते हैं (जैसे createButton(), createCheckbox())।
  • Concrete Factories इस interface को लागू करती हैं और प्रत्येक किसी विशिष्ट परिवार के उत्पाद बनाने के लिए ज़िम्मेदार होती है (जैसे WindowsUIFactory, MacUIFactory)।
  • आपका क्लाइंट कोड केवल abstract factory और abstract products के साथ काम करता है, इसलिए वह ठोस implementations से स्वतंत्र रहता है।

Abstract Factory कोड: UI किट

आइए देखें कि Abstract Factory अलग-अलग UI components कैसे बना सकता है। यहाँ हम Button और Checkbox के लिए interfaces तथा अलग-अलग OS styles के लिए उन्हें बनाने वाला UIFactory परिभाषित करते हैं।

interface Button {
  void paint();
}

interface Checkbox {
  void paint();
}

class WindowsButton implements Button {
  @Override
  public void paint() {
    System.out.println("Rendered Windows Button");
  }
}

class MacButton implements Button {
  @Override
  public void paint() {
    System.out.println("Rendered Mac Button");
  }
}

class WindowsCheckbox implements Checkbox {
  @Override
  public void paint() {
    System.out.println("Rendered Windows Checkbox");
  }
}

class MacCheckbox implements Checkbox {
  @Override
  public void paint() {
    System.out.println("Rendered Mac Checkbox");
  }
}

interface UIFactory {
  Button createButton();
  Checkbox createCheckbox();
}

class WindowsUIFactory implements UIFactory {
  @Override
  public Button createButton() {
    return new WindowsButton();
  }

  @Override
  public Checkbox createCheckbox() {
    return new WindowsCheckbox();
  }
}

class MacUIFactory implements UIFactory {
  @Override
  public Button createButton() {
    return new MacButton();
  }

  @Override
  public Checkbox createCheckbox() {
    return new MacCheckbox();
  }
}

public class Main {
  public static void main(String[] args) {
    UIFactory factory;
    String os = "Mac"; // Or "Windows"

    if (os.equals("Windows")) {
      factory = new WindowsUIFactory();
    } else {
      factory = new MacUIFactory();
    }

    Button button = factory.createButton();
    Checkbox checkbox = factory.createCheckbox();

    button.paint();
    checkbox.paint();
  }
}

Builder Pattern: जटिल ऑब्जेक्ट्स

अब Builder pattern की ओर चलते हैं। कल्पना कीजिए कि आपको कोई जटिल ऑब्जेक्ट बनाना है, जैसे अपनी आवश्यकताओं के अनुसार कंप्यूटर या विस्तृत रिपोर्ट।

इस ऑब्जेक्ट में कई वैकल्पिक भाग हो सकते हैं और इसके निर्माण में चरणों का एक निश्चित क्रम शामिल हो सकता है।

यदि आप कई parameters वाला constructor उपयोग करने का प्रयास करते हैं, तो कोड जल्दी ही अपठनीय और सँभालना कठिन हो जाता है।

बिल्डर पैटर्न: प्रक्रिया

बिल्डर पैटर्न किसी जटिल ऑब्जेक्ट के निर्माण को उसके निरूपण से अलग करता है।

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

बिल्डर कोड: मनपसंद पिज़्ज़ा!

आइए, मनपसंद Pizza बनाने के लिए बिल्डर पैटर्न का उपयोग करें। हम क्रस्ट, सॉस, चीज़ और टॉपिंग को चरण-दर-चरण निर्दिष्ट कर सकते हैं, जिससे निर्माण की प्रक्रिया स्पष्ट रहती है।

class Pizza {
  private String crust;
  private String sauce;
  private String cheese;
  private String toppings;

  public Pizza(String crust, String sauce, String cheese, String toppings) {
    this.crust = crust;
    this.sauce = sauce;
    this.cheese = cheese;
    this.toppings = toppings;
  }

  @Override
  public String toString() {
    return "Pizza with: " + crust + " crust, " + sauce + " sauce, " + cheese + " cheese, " + toppings + ".";
  }
}

class PizzaBuilder {
  private String crust = "thin";
  private String sauce = "tomato";
  private String cheese = "mozzarella";
  private String toppings = "none";

  public PizzaBuilder withCrust(String crust) {
    this.crust = crust;
    return this;
  }

  public PizzaBuilder withSauce(String sauce) {
    this.sauce = sauce;
    return this;
  }

  public PizzaBuilder withCheese(String cheese) {
    this.cheese = cheese;
    return this;
  }

  public PizzaBuilder withToppings(String toppings) {
    this.toppings = toppings;
    return this;
  }

  public Pizza build() {
    return new Pizza(crust, sauce, cheese, toppings);
  }
}

public class Main {
  public static void main(String[] args) {
    Pizza margherita = new PizzaBuilder()
      .withCrust("classic")
      .withSauce("tomato")
      .withCheese("mozzarella")
      .build();
    System.out.println(margherita);

    Pizza veggieDelight = new PizzaBuilder()
      .withCrust("whole wheat")
      .withSauce("pesto")
      .withCheese("feta")
      .withToppings("onions, peppers, olives")
      .build();
    System.out.println(veggieDelight);
  }
}

पैटर्न की तुलना

हालाँकि दोनों पैटर्न ऑब्जेक्ट बनाने से संबंधित हैं, लेकिन वे अलग-अलग समस्याएँ हल करते हैं:

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

एब्स्ट्रैक्ट फ़ैक्टरी एक फ़ैक्टरी लौटाती है, जबकि बिल्डर स्वयं उत्पाद लौटाता है।

व्यावहारिक उपयोग

आपको ये पैटर्न वास्तविक जीवन के कई परिदृश्यों में मिलेंगे:

  • एब्स्ट्रैक्ट फ़ैक्टरी: डेटाबेस कनेक्शन फ़ैक्ट्रियाँ (जैसे MySQL, PostgreSQL और Oracle के लिए विशिष्ट कनेक्शन ऑब्जेक्ट बनाना), विभिन्न प्लेटफ़ॉर्म के यूआई टूलकिट या किसी सिस्टम के अलग-अलग कॉन्फ़िगरेशन बनाना।
  • बिल्डर: जटिल SQL क्वेरी बनाना, कई अनुकूलन योग्य अनुभागों वाली रिपोर्ट तैयार करना, HTTP अनुरोध कॉन्फ़िगर करना या जटिल डेटा ट्रांसफ़र ऑब्जेक्ट (DTO) बनाना।

ये ऑब्जेक्ट इंस्टैंस बनाने की प्रक्रिया में स्पष्टता और लचीलापन लाते हैं।

त्वरित जाँच

नीचे दी गई समस्याओं पर विचार कीजिए। इनमें से कौन-सी समस्याएँ आम तौर पर एब्स्ट्रैक्ट फ़ैक्टरी पैटर्न का उपयोग करके सबसे अच्छी तरह हल की जाती हैं?

एब्स्ट्रैक्ट फ़ैक्टरी और बिल्डर का पुनरावलोकन

बहुत अच्छा! इस पाठ में आपने ऑब्जेक्ट बनाने वाले दो शक्तिशाली पैटर्न सीखे:

  • एब्स्ट्रैक्ट फ़ैक्टरी: संबंधित ऑब्जेक्टों के समूह बनाने के लिए सर्वोत्तम, जिससे अलग-अलग कार्यान्वयनों में एकरूपता सुनिश्चित होती है।
  • बिल्डर: जटिल ऑब्जेक्टों को चरण-दर-चरण बनाने के लिए उपयुक्त, खासकर तब जब उनमें कई वैकल्पिक हिस्से हों; इससे निर्माण प्रक्रिया स्पष्ट और व्यवस्थित रहती है।

लचीले और आसानी से अनुरक्षित सॉफ़्टवेयर सिस्टम बनाने के लिए ये पैटर्न महत्वपूर्ण साधन हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “एब्स्ट्रैक्ट फ़ैक्टरी और बिल्डर” पाठ निःशुल्क है?

हाँ—“एब्स्ट्रैक्ट फ़ैक्टरी और बिल्डर” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“एब्स्ट्रैक्ट फ़ैक्टरी और बिल्डर” में मैं क्या सीखूँगा?

संबंधित ऑब्जेक्ट के समूह बनाने के लिए एब्स्ट्रैक्ट फ़ैक्टरी और जटिल ऑब्जेक्ट को चरण-दर-चरण बनाने के लिए बिल्डर को समझें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“एब्स्ट्रैक्ट फ़ैक्टरी और बिल्डर” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. सिंगलटन और फ़ैक्टरी मेथड
  2. एब्स्ट्रैक्ट फ़ैक्टरी और बिल्डर
  3. प्रोटोटाइप और ऑब्जेक्ट पूल
  4. Creational technique के रूप में dependency injection
← व्यवहार में क्लीन आर्किटेक्चर और डिज़ाइन पैटर्न पर वापस जाएँ