हाय! आम्ही आता एका विस्तृत आणि अत्यंत महत्त्वाच्या उपयुक्त विषयाचा शोध घेत आहोत: डिझाइन पॅटर्न. आज आपण ब्रिज पॅटर्नबद्दल बोलूया. इतर नमुन्यांप्रमाणे, ब्रिज पॅटर्न सॉफ्टवेअर आर्किटेक्चरची रचना करताना विकसकाला येणाऱ्या विशिष्ट समस्यांचे निराकरण करण्यासाठी कार्य करते. आज या पॅटर्नच्या वैशिष्ट्यांचा अभ्यास करू आणि ते कसे वापरायचे ते शोधूया.

पुलाचा नमुना काय आहे?

ब्रिज पॅटर्न हा स्ट्रक्चरल डिझाइन पॅटर्न आहे. दुसऱ्या शब्दांत, त्याचे मुख्य कार्य वर्ग आणि वस्तूंमधून एक पूर्ण रचना तयार करणे आहे. ब्रिज हे एक किंवा अधिक वर्गांना स्वतंत्र पदानुक्रमांमध्ये विभाजित करून करते: अमूर्तता आणि अंमलबजावणी . एका पदानुक्रमातील कार्यक्षमतेतील बदलामुळे दुसऱ्या पदानुक्रमात बदल होत नाही. हे सर्व ठीक आणि चांगले आहे, परंतु ही व्याख्या खूप विस्तृत आहे आणि सर्वात महत्वाच्या प्रश्नाचे उत्तर देत नाही: "ब्रिज पॅटर्न काय आहे?" मला वाटते की त्याचा व्यावहारिक उपयोग समजून घेणे तुम्हाला सोपे जाईल. तर लगेच, ब्रिज पॅटर्नसाठी एक उत्कृष्ट परिस्थिती तयार करूया. आमच्याकडे एक अमूर्त 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हा एक पूल आहे जो दोन स्वतंत्र वर्ग पदानुक्रमांना जोडतो.

पूल कसा तयार करायचा: अमूर्तता आणि अंमलबजावणी

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

ब्रिज पॅटर्न कुठे वापरायचा

या पॅटर्नचा वापर करण्याचा एक मोठा फायदा असा आहे की तुम्ही एका पदानुक्रमातील फंक्शनल क्लासेसमध्ये दुसर्‍याचे तर्क न मोडता बदल करू शकता. तसेच, हा दृष्टिकोन वर्गांमधील कपलिंग कमी करण्यास मदत करतो. हा नमुना वापरताना मुख्य आवश्यकता म्हणजे "सूचनांचे अनुसरण करा" - त्यापैकी कोणत्याहीकडे दुर्लक्ष करू नका! त्यासाठी, आपण निश्चितपणे ब्रिज पॅटर्न कधी वापरला पाहिजे हे जाणून घेऊया:
  1. जर तुम्हाला दोन संकल्पनांच्या (उदा. आकार आणि रंग) संयोजनावर आधारित घटकांची संख्या वाढवायची असेल.

  2. एकल-जबाबदारी तत्त्वाची पूर्तता न करणार्‍या मोठ्या वर्गाची कार्यक्षमता संकुचित असलेल्या छोट्या वर्गांमध्ये विभागायची असल्यास.

  3. प्रोग्राम चालू असताना काही घटकांच्या तर्कामध्ये बदल करणे आवश्यक असल्यास.

  4. वर्ग किंवा लायब्ररीच्या क्लायंटपासून अंमलबजावणी लपवणे आवश्यक असल्यास.

जेव्हा तुम्ही हा पॅटर्न वापरता, तेव्हा नेहमी लक्षात ठेवा की ते तुमच्या कोडमध्ये अतिरिक्त घटक जोडते — जिथे फक्त एक आकार आणि एक किंवा दोन संभाव्य रंग असतील अशा प्रोजेक्टमध्ये ते वापरण्यात काही अर्थ नाही.

पॅटर्नचे फायदे आणि तोटे

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

रणनीती पद्धतीपेक्षा फरक

ब्रिज पॅटर्न अनेकदा दुसर्‍या डिझाइन पॅटर्नमध्ये गोंधळलेला असतो — रणनीती. ते दोघे रचना वापरतात (आम्ही आकृती आणि रंगांसह उदाहरणामध्ये एकत्रीकरण वापरले असले तरी, ब्रिज पॅटर्न देखील रचना वापरू शकतो), इतर वस्तूंना कार्य सोपवतो. पण त्यांच्यात फरक आहे आणि तो खूप मोठा आहे. स्ट्रॅटेजी पॅटर्न हा वर्तणुकीचा नमुना आहे: तो पूर्णपणे भिन्न समस्या सोडवतो. रणनीती अल्गोरिदमची अदलाबदल करण्यास अनुमती देते, तर ब्रिज विविध अंमलबजावणींमधून निवडण्यासाठी अंमलबजावणीपासून अमूर्तता वेगळे करते. दुसऱ्या शब्दांत, रणनीतीच्या विपरीत, एक पूल संपूर्ण संस्था किंवा श्रेणीबद्ध संरचनांना लागू होतो. ब्रिज पॅटर्न विकसकाच्या शस्त्रागारात एक चांगले शस्त्र असू शकते. मुख्य गोष्ट म्हणजे ते वापरणे योग्य आहे अशा परिस्थिती ओळखणे आणि इतर पॅटर्न कधी योग्य आहे हे ओळखणे.