पुलाचा नमुना काय आहे?
ब्रिज पॅटर्न हा स्ट्रक्चरल डिझाइन पॅटर्न आहे. दुसऱ्या शब्दांत, त्याचे मुख्य कार्य वर्ग आणि वस्तूंमधून एक पूर्ण रचना तयार करणे आहे. ब्रिज हे एक किंवा अधिक वर्गांना स्वतंत्र पदानुक्रमांमध्ये विभाजित करून करते: अमूर्तता आणि अंमलबजावणी . एका पदानुक्रमातील कार्यक्षमतेतील बदलामुळे दुसऱ्या पदानुक्रमात बदल होत नाही. हे सर्व ठीक आणि चांगले आहे, परंतु ही व्याख्या खूप विस्तृत आहे आणि सर्वात महत्वाच्या प्रश्नाचे उत्तर देत नाही: "ब्रिज पॅटर्न काय आहे?" मला वाटते की त्याचा व्यावहारिक उपयोग समजून घेणे तुम्हाला सोपे जाईल. तर लगेच, ब्रिज पॅटर्नसाठी एक उत्कृष्ट परिस्थिती तयार करूया. आमच्याकडे एक अमूर्तShapeवर्ग आहे, जो सामान्य भौमितिक आकृती दर्शवतो:
-
आकार.जावा
public abstract class Shape { public abstract void draw(); }जेव्हा आम्ही त्रिकोण आणि आयतासारखे आकार जोडायचे ठरवतो, तेव्हा आम्ही त्यांना वर्ग वारसा बनवू
Shape: -
Rectangle.java:
public class Rectangle extends Shape { @Override public void draw() { System.out.println("Drawing rectangle"); } } -
Triangle.java:
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(); } -
BlackColor.java:
public class BlackColor implements Color { @Override public void fillColor() { System.out.println("Filling in black color"); } } -
GreenColor.java
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. आपण त्याचे मूल्य कन्स्ट्रक्टरमध्ये मिळवू. -
Shape.java:
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इंटरफेस आहे - ConcreteImplementor म्हणजे
BlackColor,GreenColorआणिRedColorवर्ग.
Shapeहा एक अमूर्तता आहे - विविध रंगांसह आकार भरण्याचे व्यवस्थापन करण्यासाठी एक यंत्रणा, जी इंटरफेसला Color(इम्प्लीमेंटर) नियुक्त करते. आणि वर्ग हे ठोस वर्ग आहेत जे वर्गाने उपलब्ध करून Triangleदिलेली Rectangleयंत्रणा वापरतात Shape. BlackColor, GreenColorआणि RedColorअंमलबजावणी पदानुक्रमात ठोस अंमलबजावणी आहेत.
ब्रिज पॅटर्न कुठे वापरायचा
या पॅटर्नचा वापर करण्याचा एक मोठा फायदा असा आहे की तुम्ही एका पदानुक्रमातील फंक्शनल क्लासेसमध्ये दुसर्याचे तर्क न मोडता बदल करू शकता. तसेच, हा दृष्टिकोन वर्गांमधील कपलिंग कमी करण्यास मदत करतो. हा नमुना वापरताना मुख्य आवश्यकता म्हणजे "सूचनांचे अनुसरण करा" - त्यापैकी कोणत्याहीकडे दुर्लक्ष करू नका! त्यासाठी, आपण निश्चितपणे ब्रिज पॅटर्न कधी वापरला पाहिजे हे जाणून घेऊया:-
जर तुम्हाला दोन संकल्पनांच्या (उदा. आकार आणि रंग) संयोजनावर आधारित घटकांची संख्या वाढवायची असेल.
-
एकल-जबाबदारी तत्त्वाची पूर्तता न करणार्या मोठ्या वर्गाची कार्यक्षमता संकुचित असलेल्या छोट्या वर्गांमध्ये विभागायची असल्यास.
-
प्रोग्राम चालू असताना काही घटकांच्या तर्कामध्ये बदल करणे आवश्यक असल्यास.
-
वर्ग किंवा लायब्ररीच्या क्लायंटपासून अंमलबजावणी लपवणे आवश्यक असल्यास.
पॅटर्नचे फायदे आणि तोटे
इतर नमुन्यांप्रमाणे, पुलाचे फायदे आणि तोटे दोन्ही आहेत. ब्रिज पॅटर्नचे फायदे:- हे कोडची स्केलेबिलिटी सुधारते — तुम्ही प्रोग्रामच्या दुसर्या भागात काहीतरी खंडित होण्याच्या भीतीशिवाय कार्यक्षमता जोडू शकता.
- जेव्हा घटकांची संख्या अन्यथा दोन संकल्पनांच्या (उदाहरणार्थ, आकार आणि रंग) संयोजनांवर आधारित असेल तेव्हा ते उपवर्गांची संख्या कमी करते.
- हे दोन स्वतंत्र पदानुक्रमांवर स्वतंत्रपणे कार्य करणे शक्य करते - अॅब्स्ट्रॅक्शन आणि अंमलबजावणी. दोन भिन्न डेव्हलपर एकमेकांच्या कोडच्या तपशीलांचा शोध न घेता बदल करू शकतात.
- हे वर्गांमधील कपलिंग कमी करते — दोन वर्ग जोडलेले एकमेव ठिकाण म्हणजे पूल (म्हणजे फील्ड
Color color).
- विशिष्ट परिस्थिती आणि प्रकल्पाच्या एकूण संरचनेवर अवलंबून, ते प्रोग्रामच्या कार्यक्षमतेवर नकारात्मक परिणाम करू शकते (उदाहरणार्थ, जर तुम्हाला अधिक ऑब्जेक्ट्स सुरू करण्याची आवश्यकता असेल).
- दोन वर्गांमध्ये अदलाबदल करण्याच्या आवश्यकतेमुळे ते कोड कमी वाचनीय बनवते.
GO TO FULL VERSION