ब्रिज और एडेप्टर का इरादा अलग है और हमें दोनों पैटर्न अलग-अलग चाहिए।
पुल पैटर्न:
- यह एक संरचनात्मक पैटर्न है
- संकलन और कार्यान्वयन संकलन समय पर बाध्य नहीं हैं
- अमूर्त और कार्यान्वयन - दोनों क्लाइंट में प्रभाव के बिना भिन्न हो सकते हैं
- विरासत पर रचना का उपयोग करता है।
पुल पैटर्न का उपयोग करें जब:
- आप कार्यान्वयन के रन-टाइम बाइंडिंग चाहते हैं,
- आपके पास युग्मित इंटरफ़ेस और कई कार्यान्वयनों से उत्पन्न वर्गों का प्रसार है,
- आप कई वस्तुओं के बीच एक कार्यान्वयन साझा करना चाहते हैं,
- आपको ऑर्थोगोनल क्लास पदानुक्रम को मैप करने की आवश्यकता है।
@ जॉन सोनमेज़ का उत्तर स्पष्ट रूप से वर्ग पदानुक्रम को कम करने में पुल पैटर्न की प्रभावशीलता को दर्शाता है।
आप कोड उदाहरण के साथ ब्रिज पैटर्न में बेहतर जानकारी प्राप्त करने के लिए नीचे दिए गए दस्तावेज़ीकरण लिंक का उल्लेख कर सकते हैं
एडाप्टर पैटर्न :
- यह दो असंबंधित इंटरफेस को विभिन्न वस्तुओं के माध्यम से एक साथ काम करने की अनुमति देता है , संभवतः एक ही भूमिका निभा रहा है।
- यह मूल इंटरफ़ेस को संशोधित करता है।
मुख्य अंतर:
- एडेप्टर चीजों को डिज़ाइन करने के बाद काम करते हैं; ब्रिज बनने से पहले वे उन्हें काम करते हैं।
- पुल अप-फ्रंट डिज़ाइन किया गया है ताकि अमूर्त और कार्यान्वयन स्वतंत्र रूप से भिन्न हो सकें । असंबंधित वर्गों को एक साथ काम करने के लिए एडॉप्टर को रेट्रोफिटेड किया जाता है।
- इरादा: एडाप्टर दो असंबंधित इंटरफेस को एक साथ काम करने की अनुमति देता है। ब्रिज अमूर्तता और कार्यान्वयन को स्वतंत्र रूप से भिन्न करने की अनुमति देता है।
यूएमएल आरेख और काम कोड के साथ संबंधित एसई प्रश्न:
ब्रिज पैटर्न और एडेप्टर पैटर्न के बीच अंतर
उपयोगी लेख:
sourcemaking ब्रिज पैटर्न लेख
sourcemaking एडाप्टर पैटर्न लेख
जर्नलदेव ब्रिज पैटर्न लेख
संपादित करें:
ब्रिज पैटर्न वास्तविक दुनिया उदाहरण (जैसा कि meta.stackoverflow.com सुझाव के अनुसार, प्रलेखन में इस साइट को शामिल किया गया है क्योंकि दस्तावेज़ीकरण सूरज डूबने वाला है)
ब्रिज पैटर्न कार्यान्वयन से अमूर्तता को कम करता है ताकि दोनों स्वतंत्र रूप से भिन्न हो सकें। यह विरासत के बजाय रचना के साथ हासिल किया गया है।
पुल पैटर्न UML विकिपीडिया से:
इस पैटर्न में आपके चार घटक हैं।
Abstraction
: यह एक इंटरफ़ेस को परिभाषित करता है
RefinedAbstraction
: यह अमूर्तता को लागू करता है:
Implementor
: यह कार्यान्वयन के लिए एक इंटरफ़ेस को परिभाषित करता है
ConcreteImplementor
: यह कार्यान्वयनकर्ता इंटरफ़ेस को लागू करता है।
The crux of Bridge pattern :
दो orthogonal वर्ग पदानुक्रम रचना (और कोई विरासत) का उपयोग कर। अमूर्त पदानुक्रम और कार्यान्वयन पदानुक्रम स्वतंत्र रूप से भिन्न हो सकते हैं। कार्यान्वयन कभी भी अमूर्तता को नहीं दर्शाता है। अमूर्त में एक सदस्य (रचना के माध्यम से) के रूप में कार्यान्वयन इंटरफ़ेस शामिल है। यह रचना वंशानुक्रम पदानुक्रम के एक और स्तर को कम करती है।
वास्तविक शब्द उपयोग मामला:
मैन्युअल और ऑटो गियर सिस्टम दोनों संस्करणों के लिए विभिन्न वाहनों को सक्षम करें।
उदाहरण कोड:
/* Implementor interface*/
interface Gear{
void handleGear();
}
/* Concrete Implementor - 1 */
class ManualGear implements Gear{
public void handleGear(){
System.out.println("Manual gear");
}
}
/* Concrete Implementor - 2 */
class AutoGear implements Gear{
public void handleGear(){
System.out.println("Auto gear");
}
}
/* Abstraction (abstract class) */
abstract class Vehicle {
Gear gear;
public Vehicle(Gear gear){
this.gear = gear;
}
abstract void addGear();
}
/* RefinedAbstraction - 1*/
class Car extends Vehicle{
public Car(Gear gear){
super(gear);
// initialize various other Car components to make the car
}
public void addGear(){
System.out.print("Car handles ");
gear.handleGear();
}
}
/* RefinedAbstraction - 2 */
class Truck extends Vehicle{
public Truck(Gear gear){
super(gear);
// initialize various other Truck components to make the car
}
public void addGear(){
System.out.print("Truck handles " );
gear.handleGear();
}
}
/* Client program */
public class BridgeDemo {
public static void main(String args[]){
Gear gear = new ManualGear();
Vehicle vehicle = new Car(gear);
vehicle.addGear();
gear = new AutoGear();
vehicle = new Car(gear);
vehicle.addGear();
gear = new ManualGear();
vehicle = new Truck(gear);
vehicle.addGear();
gear = new AutoGear();
vehicle = new Truck(gear);
vehicle.addGear();
}
}
उत्पादन:
Car handles Manual gear
Car handles Auto gear
Truck handles Manual gear
Truck handles Auto gear
स्पष्टीकरण:
Vehicle
एक अमूर्त है।
Car
और Truck
दो ठोस कार्यान्वयन हैं Vehicle
।
Vehicle
एक अमूर्त विधि को परिभाषित करता है addGear()
:।
Gear
कार्यान्वयनकर्ता इंटरफ़ेस है
ManualGear
और के AutoGear
दो कार्यान्वयन हैं Gear
Vehicle
implementor
इंटरफ़ेस को लागू करने के बजाय इंटरफ़ेस शामिल है । Compositon
कार्यान्वयनकर्ता इंटरफ़ेस इस पैटर्न का एक प्रकार है: यह अमूर्तता और कार्यान्वयन को स्वतंत्र रूप से भिन्न करने की अनुमति देता है।
Car
और Truck
अमूर्त के लिए कार्यान्वयन (नए सिरे से परिभाषित अमूर्त) को परिभाषित: addGear()
: यह होता है Gear
- या तो Manual
याAuto
पुल पैटर्न के लिए मामले का उपयोग करें :
- अमूर्तता और कार्यान्वयन एक-दूसरे को स्वतंत्र रूप से बदल सकते हैं और वे संकलन समय पर बाध्य नहीं होते हैं
- मानचित्र ऑर्थोगोनल पदानुक्रम - एक अमूर्त के लिए और एक कार्यान्वयन के लिए ।