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

यदि-अन्यथा ब्लॉक का अब और उपयोग न करें! रणनीति और फ़ैक्टरी पैटर्न का एक साथ उपयोग करें

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

Don’t use if-else blocks anymore! Use Strategy and Factory Pattern Together

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

समस्या: यदि-अन्यथा भ्रम

मान लीजिए कि आप एक ई-कॉमर्स एप्लिकेशन विकसित कर रहे हैं और आपको क्रेडिट कार्ड, डेबिट कार्ड और क्रिप्टोकरेंसी जैसी विभिन्न भुगतान विधियों का समर्थन करने की आवश्यकता है। आप भुगतान संसाधित करने के लिए if-else ब्लॉक से शुरुआत करते हैं:

public class PaymentService {

    public void processPayment(String paymentType) {
        if (paymentType.equals("CREDIT_CARD")) {
            System.out.println("Processing credit card payment...");
        } else if (paymentType.equals("DEBIT_CARD")) {
            System.out.println("Processing debit card payment...");
        } else if (paymentType.equals("CRYPTO")) {
            System.out.println("Processing crypto payment...");
        } else {
            throw new IllegalArgumentException("Invalid payment type");
        }
    }
}

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

लेकिन, हम इस समस्या को हल करने के लिए रणनीति और फ़ैक्टरी पैटर्न दोनों का उपयोग कर सकते हैं।

सबसे पहले, आइए एक एन्यूम बनाएं:

public enum PaymentType {
    CREDIT_CARD,
    DEBIT_CARD,
    CRYPTO
}

समाधान: रणनीति पैटर्न के साथ सफाई

public interface PaymentStrategy {
    void pay(PaymentRequest request);
}

public class CreditCardPayment implements PaymentStrategy {
    @Override
    public void pay(PaymentRequest request) {
        System.out.println("Processing $type payment".replace("$type", String.valueOf(request.getPaymentType())));
    }
}

public class DebitCardPayment implements PaymentStrategy {
    @Override
    public void pay(PaymentRequest request) {
        System.out.println("Processing $type payment".replace("$type", String.valueOf(request.getPaymentType())));
    }
}

public class CryptoPayment implements PaymentStrategy {
    @Override
    public void pay(PaymentRequest request) {
        System.out.println("Processing $type payment".replace("$type", String.valueOf(request.getPaymentType())));
    }
}

इस स्तर पर, प्रत्येक भुगतान पद्धति के लिए एक सामान्य इंटरफ़ेस से एक अलग रणनीति लागू की जाती है। अब, फ़ैक्टरी पैटर्न के साथ, हम तय करेंगे कि कौन सी रणनीति चुननी है।

चरण 2: फ़ैक्टरी पैटर्न के साथ रणनीति चुनना

इस चरण में, हम फ़ैक्टरी पैटर्न को EnumMap के साथ साफ़ और अनुकूलित बना सकते हैं।

public class PaymentFactory {
    private static final Map strategies = new EnumMap(PaymentType.class);

    static {
        strategies.put(PaymentType.CREDIT_CARD, new CreditCardPayment());
        strategies.put(PaymentType.DEBIT_CARD, new DebitCardPayment());
        strategies.put(PaymentType.CRYPTO, new CryptoPayment());
    }

    public static PaymentStrategy getPaymentStrategy(PaymentType paymentType) {
        PaymentStrategy strategy = strategies.get(paymentType);

        if (Objects.isNull(strategy))
            throw new IllegalArgumentException("Strategy not found");

        return strategy;
    }
}

अंतिम चरण: सेवा वर्ग पुनर्गठन

अब, हमने जो किया है उसका उपयोग करें।

public class PaymentService {

    public void processPayment(PaymentRequest request) {
        // Don't forget to check objects if null!
        if (Objects.isNull(request) || Objects.isNull(request.getPaymentType())
            throw new IllegalArgumentException("Request can not be null!");
        PaymentStrategy strategy = PaymentFactory.getPaymentStrategy(request.getPaymentType());

        strategy.pay(request);
    }
}

वैसे भी, हमें भुगतान प्रसंस्करण के लिए किसी अन्य ब्लॉक की आवश्यकता नहीं है। रणनीति और फैक्टरी पैटर्न के लिए धन्यवाद, हमारा कोड क्लीनर, मॉड्यूलर और एक्स्टेंसिबल है।

हमें इस पैटर्न का उपयोग क्यों करना चाहिए?

1. विस्तारशीलता: एक नई भुगतान विधि जोड़ने के लिए केवल एक नई श्रेणी और कोड की कुछ पंक्तियों की आवश्यकता होती है।
2. पठनीयता: इफ-एल्स ब्लॉक के बजाय रणनीतियों और फैक्ट्री का उपयोग करके, आप अपने कोड को अधिक समझने योग्य और प्रबंधनीय बनाते हैं।
3. रख-रखाव: रणनीति और फ़ैक्टरी पैटर्न के साथ, कोड के अन्य हिस्सों को प्रभावित किए बिना कोड में बदलाव किए जा सकते हैं।

निष्कर्ष: भ्रम से स्पष्टता तक

यदि आप किसी बढ़ते प्रोजेक्ट पर काम कर रहे हैं, तो आपको if-else ब्लॉक का उपयोग नहीं करना चाहिए। रणनीति और फ़ैक्टरी पैटर्न आपके कोड को साफ़, मॉड्यूलर और रखरखाव योग्य बनाने के लिए सही समाधान हैं।

जैसा कि आप इस लेख में देख सकते हैं, भुगतान लेनदेन को प्रबंधित करने के लिए if-else ब्लॉक के बजाय डिज़ाइन पैटर्न का उपयोग करने से प्रोजेक्ट अधिक विकसित हो जाता है और कोड की पठनीयता में सुधार होता है। if-else ब्लॉक का उपयोग करने के बजाय अपने अगले प्रोजेक्ट में इन पैटर्न को आज़माएं।

...

मेरा आलेख पढ़ने के लिए धन्यवाद! यदि आपके कोई प्रश्न, प्रतिक्रिया या विचार हैं जिन्हें आप साझा करना चाहेंगे, तो मुझे उन्हें टिप्पणियों में सुनना अच्छा लगेगा।

इस विषय पर अधिक जानकारी और मेरी अन्य पोस्ट के लिए आप मुझे dev.to पर फ़ॉलो कर सकते हैं।

धन्यवाद??

लिंक्डइन पर मुझे फॉलो करने के लिए: https://www.linkedin.com/in/tamerardal/
माध्यम: अब अन्यथा ब्लॉक का उपयोग न करें! रणनीति और फ़ैक्टरी पैटर्न का एक साथ उपयोग करें

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/tamerardal/dont-use-if-else-blocks-anymore-use-strategy-and-factory-pattern-together-4i77?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163 .comडिलीट से संपर्क करें
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3