Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

यह एक AI अनुवादित पोस्ट है।

제이온

[इफ़ेक्टिव जावा] आइटम 2. यदि आपके कन्स्ट्रक्टर में बहुत सारे पैरामीटर हैं, तो एक बिल्डर पर विचार करें

  • लेखन भाषा: कोरियाई
  • आधार देश: सभी देश country-flag

भाषा चुनें

  • हिन्दी
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • Magyar

durumis AI द्वारा संक्षेपित पाठ

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

क्रमबद्ध निर्माता पैटर्न

स्थिर कारखाने और निर्माताओं को कई पैरामीटर होने पर पर्याप्त रूप से प्रतिक्रिया देना मुश्किल होता है। उदाहरण के लिए, यदि क्लास में 6 फ़ील्ड हैं और आप 2 पैरामीटर, 3 पैरामीटर, ... के साथ निर्माता को विभाजित करना चाहते हैं, तो आप नीचे दिए गए क्रमबद्ध निर्माता पैटर्न का उपयोग कर सकते हैं।


public class NutritionFacts {

    private final int servingSize;

    private final int servings;

    private final int calories;

    private final int fat;

    private final int sodium;

    private final int carbohydrate;

    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
        this.servingSize = servingSize;
        this.servings = servings;
        this.calories = calories;
        this.fat = fat;
        this.sodium = sodium;
        this.carbohydrate = carbohydrate;
    }

    public NutritionFacts(int servingSize, int servings) {
        this(servingSize, servings, 0, 0, 0, 0);
    }

    public NutritionFacts(int servingSize, int servings, int calories) {
        this(servingSize, servings, calories, 0, 0, 0);
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat) {
        this(servingSize, servings, calories, fat, 0, 0);
    }

    public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
        this(servingSize, servings, calories, fat, sodium, 0);
    }


हालांकि, इससे भी, यदि बहुत अधिक पैरामीटर हैं, तो कोड पढ़ते समय प्रत्येक मान का अर्थ भ्रमित हो सकता है, और समान प्रकार के पैरामीटर को भ्रमित करके मान डाले जा सकते हैं।


जावा बीन्स पैटर्न

जावा बीन्स पैटर्न एक ऑब्जेक्ट को पैरामीटर रहित निर्माता के साथ बनाता है और फिर सेटर मेथड्स को कॉल करके वांछित पैरामीटर मानों को सेट करता है।


public class NutritionFactsWithJavaBeansPattern {

    private int servingSize = -1; // अनिवार्य. डिफ़ॉल्ट मान नहीं।

    private int servings = -1; // अनिवार्य. डिफ़ॉल्ट मान नहीं।

    private int calories;

    private int fat;

    private int sodium;

    private int carbohydrate;

    public void setServingSize(int servingSize) {
        this.servingSize = servingSize;
    }

    public void setServings(int servings) {
        this.servings = servings;
    }

    public void setCalories(int calories) {
        this.calories = calories;
    }

    public void setFat(int fat) {
        this.fat = fat;
    }

    public void setSodium(int sodium) {
        this.sodium = sodium;
    }

    public void setCarbohydrate(int carbohydrate) {
        this.carbohydrate = carbohydrate;
    }


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


बिल्डर पैटर्न

क्रमबद्ध निर्माता पैटर्न की स्थिरता और जावा बीन्स पैटर्न की पठनीयता को मिलाकर बिल्डर पैटर्न का उपयोग मुख्य रूप से किया जाता है।

क्लाइंट सीधे ऑब्जेक्ट बनाने के बजाय, बिल्डर ऑब्जेक्ट प्राप्त करने के लिए केवल आवश्यक पैरामीटर के साथ निर्माता को कॉल करता है। फिर, बिल्डर ऑब्जेक्ट द्वारा प्रदान किए गए एक प्रकार के सेटर मेथड्स का उपयोग करके, वह वांछित वैकल्पिक पैरामीटर सेट करता है। अंत में, वह आवश्यक ऑब्जेक्ट प्राप्त करने के लिए पैरामीटर रहित build() मेथड को कॉल करता है।


public class NutritionFactsWithBuilderPattern {

    private final int servingSize;

    private final int servings;

    private final int calories;

    private final int fat;

    private final int sodium;

    private final int carbohydrate;

    private NutritionFactsWithBuilderPattern(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        sodium = builder.sodium;
        carbohydrate = builder.carbohydrate;
    }

    public static class Builder {

        private final int servingSize;

        private final int servings;

        private int calories;

        private int fat;

        private int sodium;

        private int carbohydrate;

        public Builder(int servingSize, int servings) {
            this.servingSize = servingSize;
            this.servings = servings;
        }

        public Builder calories(int val) {
            calories = val;
            return this;
        }

        public Builder fat(int val) {
            fat = val;
            return this;
        }

        public Builder sodium(int val) {
            sodium = val;
            return this;
        }

        public Builder carbohydrate(int val) {
            calories = val;
            return this;
        }

        public NutritionFactsWithBuilderPattern build() {
            return new NutritionFactsWithBuilderPattern(this);
        }
    }


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


NutritionFactsWithBuilderPattern nutritionFacts = 
    new NutritionFactsWithBuilderPattern.Builder(240, 8)
        .calories(100)
        .sodium(35)


क्लाइंट की दृष्टि से, बिल्डर पैटर्न कोड लिखना और पढ़ना आसान बनाता है।


श्रेणीबद्ध रूप से डिज़ाइन की गई कक्षाओं के साथ अच्छी तरह से काम करने वाला बिल्डर पैटर्न

public abstract class Pizza {

    public enum Topping {
        HAM, MUSHROOM, ONION, PEPPER, SAUSAGE
    }

    final Set toppings;

    Pizza(Builder builder) {
        toppings = builder.toppings.clone();
    }

    abstract static class Builder> {

        private EnumSet toppings = EnumSet.noneOf(Topping.class);

        public T addTopping(Topping topping) {
            toppings.add(topping);
            return self();
        }

        abstract Pizza build();

        protected abstract T self();
    }


Pizza.Builder क्लास पुनरावर्ती प्रकार सीमा का उपयोग करने वाला जेनेरिक प्रकार है, और self() नामक एक सार मेथड के साथ, सबक्लास बिना कास्टिंग के मेथड चेनिंग का समर्थन कर सकते हैं। सबक्लास में, इस सार मेथड के वापसी मान को स्वयं को दिया जाना चाहिए।

अब न्यूयॉर्क पिज्जा और कैलजोन पिज्जा जैसे पिज्जा के सबक्लास को देखते हुए, बिल्डर पैटर्न के लचीलेपन का अनुभव करें।


public class NyPizza extends Pizza {

    public enum Size {
        SMALL, MEDIUM, LARGE
    }

    private final Size size; // आवश्यक पैरामीटर

    private NyPizza(Builder builder) {
        super(builder);
        size = builder.size;
    }

    public static class Builder extends Pizza.Builder {

        private final Size size;

        public Builder(Size size) {
            this.size = size;
        }

        @Override
        NyPizza build() {
            return new NyPizza(this);
        }

        @Override
        protected Builder self() {
            return this;
        }
    }

}

public class CalzonePizza extends Pizza {

    private final boolean sauceInside; // वैकल्पिक पैरामीटर

    private CalzonePizza(Builder builder) {
        super(builder);
        sauceInside = builder.sauceInside;
    }

    public static class Builder extends Pizza.Builder {

        private boolean sauceInside = false;

        public Builder sauceInside() {
            sauceInside = true;
            return this;
        }

        @Override
        CalzonePizza build() {
            return new CalzonePizza(this);
        }

        @Override
        protected Builder self() {
            return this;
        }
    }


प्रत्येक सबक्लास के बिल्डर द्वारा परिभाषित build() क्लास विशिष्ट सबक्लास को वापस करता है। सुपरक्लास के मेथड द्वारा वापस किए गए प्रकार के बजाय, सबक्लास के मेथड द्वारा वापस किया गया प्रकार उसका सबटाइप होता है, जिसे कोवैरिएंट रिटर्न टाइपिंग कहा जाता है। इस सुविधा का उपयोग करके, क्लाइंट को कास्ट करने की आवश्यकता नहीं है।


NyPizza nyPizza = new NyPizza.Builder(Size.SMALL)
    .addTopping(Topping.SAUSAGE)
    .addTopping(Topping.ONION)
    .build();

CalzonePizza calzonePizza = new CalzonePizza.Builder()
    .addTopping(Topping.HAM)
    .sauceInside()


क्लाइंट की दृष्टि से, पिज्जा के एनम और प्रत्येक सबक्लास के एनम को मिलाकर इस्तेमाल किया जा सकता है, और प्रत्येक के लिए उपयुक्त मेथड का उपयोग करके ऑब्जेक्ट को पूरा किया जा सकता है।


बिल्डर पैटर्न के नुकसान

  • बिल्डर ऑब्जेक्ट बनाना आवश्यक है।
  • कोड लंबा है।


सारांश

यदि निर्माता या स्थिर फैक्टरी मेथड को कई पैरामीटर संभालने की आवश्यकता है, तो बिल्डर पैटर्न पर विचार करें।


स्रोत

  • प्रभावी जावा
제이온
제이온
제이온
제이온
[इफ़ेक्टिव जावा] आइटम 6. अनावश्यक ऑब्जेक्ट निर्माण से बचें जावा में अनावश्यक ऑब्जेक्ट निर्माण को कम करके प्रदर्शन को बेहतर बनाने के तरीकों के बारे में बताता है। स्ट्रिंग, बूलियन, रेगुलर एक्सप्रेशन, व्यू ऑब्जेक्ट, ऑटो बॉक्सिंग जैसे विभिन्न उदाहरणों के साथ ऑब्जेक्ट पुन: उपयोग के महत्व पर जोर दिया गया है। खासकर रक्ष

28 अप्रैल 2024

[इफेक्टिव जावा] आइटम 4. इंस्टेंटिएशन को रोकने के लिए प्राइवेट कंस्ट्रक्टर का उपयोग करें केवल स्थिर विधियों और क्षेत्रों वाले उपयोगिता वर्गों के लिए, इंस्टेंटिएशन को रोकने के लिए कंस्ट्रक्टर को निजी रूप से घोषित करना सबसे अच्छा है। यह कम्पाइलर द्वारा स्वचालित रूप से उत्पन्न डिफ़ॉल्ट कंस्ट्रक्टर को नियंत्रित करने और कक्षा के बाहर इंस्टेंटिएशन

28 अप्रैल 2024

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

28 अप्रैल 2024

डेटा लेबलिंग क्या है? प्रकार, लाभ, नुकसान डेटा लेबलिंग कंप्यूटर को डेटा को समझने में मदद करने के लिए एक आवश्यक प्रक्रिया है, कुत्ते और बिल्ली की तस्वीरों को क्रमशः 'कुत्ता' और 'बिल्ली' लेबल करके, डेटा को टैग करके मशीन लर्निंग को सक्षम किया जाता है। आयत, बिंदु, बहुभुज जैसे विभिन्न लेबलिंग तरीके है
세상 모든 정보
세상 모든 정보
세상 모든 정보
세상 모든 정보

29 मार्च 2024

[गैर-प्रमुख, डेवलपर के रूप में जीवित रहना] 9. पोर्टफोलियो बनाने के लिए अच्छी साइटें सरकारी सहायता या बूटकैम्प छात्रों के लिए नौकरी के लिए पोर्टफोलियो बनाने के लिए अच्छी साइटों के 3 प्रकारों को पेश किया गया है। कंपनी में व्यापक रूप से उपयोग किए जाने वाले ग्रुपवेयर, ERP, सिस्टम इंट्रा-कंपनी मानव संसाधन जैसे सिस्टम विकसित करना या प्रसिद्ध व
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

30 मार्च 2024

[Javascript] ऑब्जेक्ट की संरचना (V8) JavaScript का Object V8 इंजन में स्थिति के अनुसार संरचना की तरह अनुकूलित Fast मोड और हैशमैप में काम करने वाले Dictionary मोड में परिवर्तित हो जाता है। Fast मोड लगभग स्थिर रूप में कुंजी और मान के साथ तेज़ होता है, लेकिन, नए कुंजी जोड़े जाने या तत्वों को हट
곽경직
곽경직
곽경직
곽경직
곽경직

18 मार्च 2024

[गैर-प्रौद्योगिकी पृष्ठभूमि, डेवलपर के रूप में जीवित रहना] 8. आत्म-परिचय पत्र कैसे लिखें? गैर-प्रौद्योगिकी पृष्ठभूमि वाले व्यक्ति के लिए डेवलपर के रूप में नौकरी पाने के लिए आत्म-परिचय पत्र लिखने का मार्गदर्शन। विकास से संबंधित अनुभव और प्रयासों को केंद्रित करते हुए, विकास के दौरान, व्यक्तित्व के गुणों और दोषों, बाहरी गतिविधियों और आवेदन के उद्
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

30 मार्च 2024

[धातु सामग्री कार्यकारी] 35वाँ हल धातु सामग्री माइक्रोस्कोपिक संरचना परीक्षण, फेराइट ग्रेन आकार निर्धारण विधि, बीसीसी का पैकिंग घनत्व, आदि धातु सामग्री से संबंधित विभिन्न शब्दों और अवधारणाओं को संक्षेपित और समझाया गया है। सीमेंटेड स्टील के लिए आवश्यक शर्तें, ठंडे काम किए गए धातु की एनीलिं
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

23 अप्रैल 2024

[धातु सामग्री कार्यकारी वास्तविक] 33वीं हल धातु सामग्री के क्रिस्टल संरचना, पर्लाइट नाभिक गठन प्रक्रिया, फेराइट क्रिस्टल ग्रेन आकार मापने की विधि, स्टील के पांच प्रमुख तत्वों और मैंगनीज के प्रभाव, टेंपरिंग भंगुरता को रोकने के उपाय, क्वेंचिंग ऑपरेशन विशेषताएँ, रेडियोग्राफिक परीक्षण एक्सपोजर कारक गण
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

23 अप्रैल 2024