CodeGym /Java Blog /अनियमित /ब्रिज डिजाइन पैटर्न
John Squirrels
स्तर 41
San Francisco

ब्रिज डिजाइन पैटर्न

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

ब्रिज पैटर्न क्या है?

ब्रिज पैटर्न एक संरचनात्मक डिजाइन पैटर्न है। दूसरे शब्दों में, इसका मुख्य काम कक्षाओं और वस्तुओं से पूर्ण संरचना बनाना है। एक पुल एक या एक से अधिक वर्गों को अलग-अलग पदानुक्रमों में विभाजित करके करता है: अमूर्तता और कार्यान्वयन । एक पदानुक्रम में कार्यक्षमता में परिवर्तन से दूसरे में परिवर्तन नहीं होता है। यह सब ठीक है और अच्छा है, लेकिन यह परिभाषा बहुत व्यापक है और सबसे महत्वपूर्ण प्रश्न का उत्तर नहीं देती है: "ब्रिज पैटर्न क्या है?" मुझे लगता है कि आपके लिए इसके व्यावहारिक अनुप्रयोग को समझना आसान होगा। तो ठीक है, चलिए ब्रिज पैटर्न के लिए एक क्लासिक परिदृश्य बनाते हैं। हमारे पास एक अमूर्त Shapeवर्ग है, जो एक सामान्य ज्यामितीय आकृति का प्रतिनिधित्व करता है:
  • शेप.जावा

    
    public abstract class Shape {
       public abstract void draw();
    }
    

    जब हम त्रिभुज और आयत जैसी आकृतियों को जोड़ने का निर्णय लेते हैं, तो हम उन्हें वर्ग का उत्तराधिकारी बना देंगे Shape:

  • आयत.जावा:

    
    public class Rectangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
       }
    }
    
  • त्रिकोण.जावा:

    
    public class Triangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing triangle");
       }
    }
    
जब तक हम रंग की अवधारणा का परिचय नहीं देते, तब तक सब कुछ सरल दिखता है। अर्थात्, प्रत्येक आकृति का अपना रंग होगा, और draw()विधि की कार्यक्षमता इस रंग पर निर्भर करेगी। विधि के अलग-अलग कार्यान्वयन के लिए draw(), हमें प्रत्येक आकृति-रंग संयोजन के लिए एक वर्ग बनाने की आवश्यकता है। यदि हमारे पास तीन रंग हैं, तो हमें छह वर्गों की आवश्यकता है: TriangleBlack, TriangleGreen, TriangleRed, और । छह वर्ग इतनी बड़ी समस्या नहीं है। लेकिन! यदि हमें कोई नया आकार या रंग जोड़ने की आवश्यकता है, तो वर्गों की संख्या तेजी से बढ़ती है। इस स्थिति से कैसे बाहर निकलें? एक क्षेत्र में रंग जमा करना और सशर्त बयानों का उपयोग करके सभी विकल्पों की गणना करना सबसे अच्छा समाधान नहीं है। रंग को एक अलग इंटरफ़ेस में ले जाना एक अच्छा समाधान हैRectangleBlackRectangleGreenRectangleRed. जितना जल्दी कहा जाए उतना हो गया: चलिए Colorतीन कार्यान्वयनों के साथ एक इंटरफ़ेस बनाते हैं: BlackColor, GreenColorऔर RedColor:
  • रंग.जावा:

    
    public interface Color {
       void fillColor();
    }
    
  • काला रंग.जावा:

    
    public class BlackColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in black color");
       }
    }
    
  • ग्रीनकलर.जावा

    
    public class GreenColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in green color");
       }
    }
    
  • RedColor.java

    
    public class RedColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in red color");
       }
    }
    

    अब हम कक्षा Colorमें एक फ़ील्ड जोड़ते हैं Shape। हम इसका मूल्य कंस्ट्रक्टर में प्राप्त करेंगे।

  • आकार जावा:

    
    public abstract class Shape {
       protected Color color;
      
       public Shape(Color color) {
           this.color = color;
       }
    
       public abstract void draw();
    }
    

    हम कार्यान्वयन colorमें चर का उपयोग करेंगे । इसका अर्थ है कि आकृतियाँ अब इंटरफ़ेस Shapeकी कार्यक्षमता का उपयोग कर सकती हैं ।Color

  • आयत।जावा

    
    public class Rectangle extends Shape {
    
       public Rectangle(Color color) {
           super(color);
       }
    
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
           color.fillColor();
       }
    }
    
ता-दा! अब हम अनंत तक अलग-अलग रंग और आकार बना सकते हैं, और कक्षाओं की संख्या केवल रैखिक रूप से बढ़ेगी। क्षेत्र Color colorएक पुल है जो दो अलग-अलग वर्ग पदानुक्रमों को जोड़ता है।

कैसे एक पुल का निर्माण करने के लिए: अमूर्त और कार्यान्वयन

आइए एक क्लास डायग्राम देखें जो ब्रिज पैटर्न को दर्शाता है: ब्रिज डिजाइन पैटर्न का परिचय - 2यहां आप दो स्वतंत्र संरचनाएं देख सकते हैं जिन्हें एक दूसरे की कार्यक्षमता को प्रभावित किए बिना संशोधित किया जा सकता है। हमारे मामले में:
  • Shapeअमूर्त वर्ग है
  • RefinedAbstraction है Triangleऔर Rectangleकक्षाएं
  • Colorइम्प्लीमेंटर इंटरफ़ेस है
  • BlackColorकंक्रीट इम्प्लीमेंटर , GreenColorऔर RedColorक्लासेस है ।
वर्ग Shapeएक अमूर्त है - विभिन्न रंगों के साथ आकृतियों को भरने के प्रबंधन के लिए एक तंत्र, जो Colorइंटरफ़ेस (कार्यान्वयनकर्ता) को दर्शाता है। और वर्ग ठोस वर्ग हैं जो वर्ग द्वारा उपलब्ध कराए Triangleगए Rectangleतंत्र का उपयोग करते हैं । , और कार्यान्वयन पदानुक्रम में ठोस कार्यान्वयन हैं।ShapeBlackColorGreenColorRedColor

ब्रिज पैटर्न का उपयोग कहां करें

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

  2. यदि आप एक बड़े वर्ग को विभाजित करना चाहते हैं जो एकल-जिम्मेदारी सिद्धांत को छोटे वर्गों में विभाजित नहीं करता है जिसमें संकीर्ण कार्यक्षमता है।

  3. यदि कार्यक्रम के चलने के दौरान कुछ संस्थाओं के तर्क में परिवर्तन करना आवश्यक है।

  4. यदि कक्षा या पुस्तकालय के ग्राहकों से कार्यान्वयन को छिपाना आवश्यक है।

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

पैटर्न के पेशेवरों और विपक्ष

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

रणनीति पैटर्न से अंतर

पुल पैटर्न अक्सर एक अन्य डिजाइन पैटर्न - रणनीति के साथ भ्रमित होता है। वे दोनों रचना का उपयोग करते हैं (हालांकि हमने आंकड़ों और रंगों के साथ उदाहरण में एकत्रीकरण का उपयोग किया है, ब्रिज पैटर्न भी रचना का उपयोग कर सकता है), अन्य वस्तुओं को काम सौंपता है। लेकिन उनमें एक अंतर है, और यह बहुत बड़ा है। रणनीति पैटर्न एक व्यवहारिक पैटर्न है: यह पूरी तरह से अलग समस्याओं को हल करता है। रणनीति एल्गोरिदम को आपस में बदलने की अनुमति देती है, जबकि पुल अलग-अलग कार्यान्वयन के बीच चयन करने के लिए कार्यान्वयन से अमूर्तता को अलग करता है। दूसरे शब्दों में, एक रणनीति के विपरीत, एक पुल संपूर्ण संस्थाओं या पदानुक्रमित संरचनाओं पर लागू होता है। डेवलपर के शस्त्रागार में पुल पैटर्न एक अच्छा हथियार हो सकता है। मुख्य बात यह है कि उन स्थितियों की पहचान करना जहां यह उपयोग करने लायक है और पहचानें कि कोई अन्य पैटर्न कब उपयुक्त है।
टिप्पणियां
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION