ब्रिज पैटर्न क्या है?
ब्रिज पैटर्न एक संरचनात्मक डिजाइन पैटर्न है। दूसरे शब्दों में, इसका मुख्य काम कक्षाओं और वस्तुओं से पूर्ण संरचना बनाना है। एक पुल एक या एक से अधिक वर्गों को अलग-अलग पदानुक्रमों में विभाजित करके करता है: अमूर्तता और कार्यान्वयन । एक पदानुक्रम में कार्यक्षमता में परिवर्तन से दूसरे में परिवर्तन नहीं होता है। यह सब ठीक है और अच्छा है, लेकिन यह परिभाषा बहुत व्यापक है और सबसे महत्वपूर्ण प्रश्न का उत्तर नहीं देती है: "ब्रिज पैटर्न क्या है?" मुझे लगता है कि आपके लिए इसके व्यावहारिक अनुप्रयोग को समझना आसान होगा। तो ठीक है, चलिए ब्रिज पैटर्न के लिए एक क्लासिक परिदृश्य बनाते हैं। हमारे पास एक अमूर्त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एक पुल है जो दो अलग-अलग वर्ग पदानुक्रमों को जोड़ता है।
कैसे एक पुल का निर्माण करने के लिए: अमूर्त और कार्यान्वयन
आइए एक क्लास डायग्राम देखें जो ब्रिज पैटर्न को दर्शाता है:
यहां आप दो स्वतंत्र संरचनाएं देख सकते हैं जिन्हें एक दूसरे की कार्यक्षमता को प्रभावित किए बिना संशोधित किया जा सकता है। हमारे मामले में:
Shapeअमूर्त वर्ग है- RefinedAbstraction है
TriangleऔरRectangleकक्षाएं Colorइम्प्लीमेंटर इंटरफ़ेस हैBlackColorकंक्रीट इम्प्लीमेंटर ,GreenColorऔरRedColorक्लासेस है ।
Shapeएक अमूर्त है - विभिन्न रंगों के साथ आकृतियों को भरने के प्रबंधन के लिए एक तंत्र, जो Colorइंटरफ़ेस (कार्यान्वयनकर्ता) को दर्शाता है। और वर्ग ठोस वर्ग हैं जो वर्ग द्वारा उपलब्ध कराए Triangleगए Rectangleतंत्र का उपयोग करते हैं । , और कार्यान्वयन पदानुक्रम में ठोस कार्यान्वयन हैं।ShapeBlackColorGreenColorRedColor
ब्रिज पैटर्न का उपयोग कहां करें
इस पैटर्न का उपयोग करने का एक बड़ा लाभ यह है कि आप दूसरे के तर्क को तोड़े बिना एक पदानुक्रम में कार्यात्मक वर्गों में परिवर्तन कर सकते हैं। साथ ही, यह दृष्टिकोण कक्षाओं के बीच युग्मन को कम करने में मदद करता है। इस पैटर्न का उपयोग करते समय मुख्य आवश्यकता "निर्देशों का पालन करें" है - उनमें से किसी को भी अनदेखा न करें! उस अंत तक, आइए उन स्थितियों का पता लगाएं जब आपको निश्चित रूप से ब्रिज पैटर्न का उपयोग करना चाहिए:-
यदि आपको दो अवधारणाओं (जैसे आकार और रंग) के संयोजन के आधार पर इकाइयों की संख्या बढ़ाने की आवश्यकता है।
-
यदि आप एक बड़े वर्ग को विभाजित करना चाहते हैं जो एकल-जिम्मेदारी सिद्धांत को छोटे वर्गों में विभाजित नहीं करता है जिसमें संकीर्ण कार्यक्षमता है।
-
यदि कार्यक्रम के चलने के दौरान कुछ संस्थाओं के तर्क में परिवर्तन करना आवश्यक है।
-
यदि कक्षा या पुस्तकालय के ग्राहकों से कार्यान्वयन को छिपाना आवश्यक है।
पैटर्न के पेशेवरों और विपक्ष
अन्य पैटर्न की तरह, ब्रिज के फायदे और नुकसान दोनों हैं। पुल पैटर्न के लाभ:- यह कोड की मापनीयता में सुधार करता है - आप कार्यक्रम के दूसरे भाग में कुछ टूटने के डर के बिना कार्यक्षमता जोड़ सकते हैं।
- यह उपवर्गों की संख्या को कम कर देता है जब संस्थाओं की संख्या अन्यथा दो अवधारणाओं (उदाहरण के लिए, आकार और रंग) के संयोजन पर आधारित होगी।
- यह दो अलग-अलग पदानुक्रमों - अमूर्तता और कार्यान्वयन पर अलग-अलग काम करना संभव बनाता है। दो अलग-अलग डेवलपर एक दूसरे के कोड के विवरण में जाने के बिना परिवर्तन कर सकते हैं।
- यह वर्गों के बीच युग्मन को कम करता है - एकमात्र स्थान जहां दो वर्गों को जोड़ा जाता है वह पुल (अर्थात
Color colorक्षेत्र) है।
- विशिष्ट स्थिति और किसी प्रोजेक्ट की समग्र संरचना के आधार पर, यह प्रोग्राम के प्रदर्शन पर नकारात्मक प्रभाव डाल सकता है (उदाहरण के लिए, यदि आपको अधिक ऑब्जेक्ट्स प्रारंभ करने की आवश्यकता है)।
- दो वर्गों के बीच स्विच करने की आवश्यकता के कारण यह कोड को कम पठनीय बनाता है।
GO TO FULL VERSION