"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > गो डिज़ाइन पैटर्न #सार फ़ैक्टरी

गो डिज़ाइन पैटर्न #सार फ़ैक्टरी

2024-11-01 को प्रकाशित
ब्राउज़ करें:563

Go Design Patterns #Abstract Factory

एब्स्ट्रैक्ट फ़ैक्टरी एक रचनात्मक डिज़ाइन पैटर्न है जो आपको उनके ठोस वर्गों को निर्दिष्ट किए बिना संबंधित ऑब्जेक्ट बनाने की सुविधा देता है।

समस्या का विवरण

कल्पना करें कि आप एक जीयूआई टूलकिट विकसित कर रहे हैं जो कई लुक-एंड-फील मानकों (जैसे, विंडोज, मैकओएस, लिनक्स) का समर्थन करता है। प्रत्येक लुक-एंड-फील मानक के लिए बटन, चेकबॉक्स और स्क्रॉलबार जैसे यूआई घटकों के एक अलग सेट की आवश्यकता होती है।

सार फ़ैक्टरी पैटर्न के बिना, आपको वर्तमान लुक-एंड-फील मानक के आधार पर इन घटकों के निर्माण को संभालने के लिए बहुत सारे सशर्त कोड लिखने होंगे। यह दृष्टिकोण स्केलेबल नहीं है और कोडबेस को बनाए रखना और विस्तारित करना कठिन बनाता है।

सार फ़ैक्टरी पैटर्न का उपयोग करके, आप संबंधित वस्तुओं (जैसे, बटन, चेकबॉक्स, स्क्रॉलबार) के परिवारों को बनाने के लिए एक इंटरफ़ेस बना सकते हैं और प्रत्येक लुक-एंड-फील मानक के लिए इस इंटरफ़ेस को कार्यान्वित कर सकते हैं। इस तरह, क्लाइंट कोड घटकों के निर्माण की बारीकियों को जाने बिना किसी भी लुक-एंड-फील मानक के साथ काम कर सकता है।

वास्तविक दुनिया का उदाहरण

एक फर्नीचर फैक्ट्री पर विचार करें जो क्लासिक और आधुनिक जैसी विभिन्न शैलियों में कुर्सियाँ और टेबल बनाती है।

प्रत्येक शैली के लिए घटकों (जैसे, पैर, बैकरेस्ट, आर्मरेस्ट) और सामग्री (जैसे, लकड़ी, धातु, प्लास्टिक) के एक अलग सेट की आवश्यकता होती है।

कार्यान्वयन

  • गो रन एब्सट्रैक्ट-फैक्ट्री/मेन.गो चलाकर उदाहरण चलाएं।
package main

import "fmt"

// Abstract Factory
type FurnitureFactory interface {
    MakeChair() Chair
    MakeTable() Table
}

func NewFurnitureFactory(style string) (FurnitureFactory, error) {
    if style == "classic" {
        return &Classic{}, nil
    }

    if style == "modern" {
        return &Modern{}, nil
    }

    return nil, fmt.Errorf("Style %s is not supported", style)
}

type Chair struct {
    Name     string
    Material string
}

type Table struct {
    Name     string
    Material string
}

// Concrete Classic Factory
type Classic struct{}

func (a *Classic) MakeChair() Chair {
    return Chair{
        Name:     "Classic Chair",
        Material: "Wood",
    }
}

func (a *Classic) MakeTable() Table {
    return Table{
        Name:     "Classic Table",
        Material: "Wood",
    }
}

// Concrete Modern Factory
type Modern struct{}

func (n *Modern) MakeChair() Chair {
    return Chair{
        Name:     "Modern Chair",
        Material: "Plastic",
    }
}

func (n *Modern) MakeTable() Table {
    return Table{
        Name:     "Modern Table",
        Material: "Plastic",
    }
}

func main() {
    factory, _ := NewFurnitureFactory("classic")

    chair := factory.MakeChair()
    table := factory.MakeTable()

    fmt.Printf("Chair: %s\n", chair.Name)
    fmt.Printf("Table: %s\n", table.Name)

    factory, _ = NewFurnitureFactory("modern")

    chair = factory.MakeChair()
    table = factory.MakeTable()

    fmt.Printf("Chair: %s\n", chair.Name)
    fmt.Printf("Table: %s\n", table.Name)
}

स्पष्टीकरण

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

विज्ञप्ति वक्तव्य इस लेख को पुन: प्रस्तुत किया गया है: https://dev.to/eduardoarndt/go-design-patterns-4-abstract-factory-971?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3