2009-11-26 17 views
5

मैंने wikipedia से इस ब्रिज पैटर्न उदाहरण पर कुछ समय व्यतीत किया था, हालांकि, मुझे अभी भी समझ में नहीं आता कि यह पुल पैटर्न क्या समझाने की कोशिश कर रहा है।ए ब्रिज पैटर्न उदाहरण

 
interface DrawingAPI { 
    public void drawCircle(double x, double y, double radius); 
} 

/** "ConcreteImplementor" 1/2 */ 
class DrawingAPI1 implements DrawingAPI { 
    public void drawCircle(double x, double y, double radius) { 
     System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius); 
    } 
} 

/** "ConcreteImplementor" 2/2 */ 
class DrawingAPI2 implements DrawingAPI { 
    public void drawCircle(double x, double y, double radius) { 
     System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius); 
    } 
} 

/** "Abstraction" */ 
interface Shape { 
    public void draw();           // low-level 
    public void resizeByPercentage(double pct);  // high-level 
} 

/** "Refined Abstraction" */ 
class CircleShape implements Shape { 
    private double x, y, radius; 
    private DrawingAPI drawingAPI; 
    public CircleShape(double x, double y, double radius, DrawingAPI drawingAPI) { 
     this.x = x; this.y = y; this.radius = radius; 
     this.drawingAPI = drawingAPI; 
    } 

    // low-level i.e. Implementation specific 
    public void draw() { 
     drawingAPI.drawCircle(x, y, radius); 
    } 
    // high-level i.e. Abstraction specific 
    public void resizeByPercentage(double pct) { 
     radius *= pct; 
    } 
} 

/** "Client" */ 
class Main { 
    public static void main(String[] args) { 
     Shape[] shapes = new Shape[2]; 
     shapes[0] = new CircleShape(1, 2, 3, new DrawingAPI1()); 
     shapes[1] = new CircleShape(5, 7, 11, new DrawingAPI2()); 

     for (Shape shape : shapes) { 
      shape.resizeByPercentage(2.5); 
      shape.draw(); 
     } 
    } 
} 

उपवर्ग CircleShape निर्माता अपनी विधि ड्रा() में 4 आर्ग लेता है, पहले 3 आर्ग 4 आर्ग जो DrawingAPI से किसी भी उपवर्ग हो सकता है करने के लिए पारित कर रहे हैं। तो क्या इसका मतलब यह है कि पुल पैटर्न का उपयोग लचीलापन बढ़ा सकता है? और क्या ऐसी चीजें हैं जो हमें बता सकती हैं?

धन्यवाद !!!!

उत्तर

6

एक और ठोस उदाहरण यह उपयोगी क्यों है यह स्पष्ट हो जाएगा। मान लीजिए DrawingAPI1 आपके ग्राफिक्स ड्राइवर को encapsulates, जबकि DrawingAPI2 आपके प्रिंटर ड्राइवर के लिए एक ही चीज करता है। फिर DrawingAPI आपके ग्राफिक्स सिस्टम के लिए जेनेरिक एपीआई है। यह आपको अपने मॉनीटर पर सर्कलशिप खींचने और उसी कोड का उपयोग करके पेपर के टुकड़े पर प्रिंट करने देता है, आपको केवल अलग-अलग ड्राइंगएपी कार्यान्वयन में ही पास करना होगा। हालांकि, यदि आप DrawingAPI को Shape.draw() में कनवर्टर में पास करने के बजाय पास करते हैं तो यह अधिक लचीला होगा क्योंकि तब आप मॉनीटर और प्रिंटर के लिए उसी ऑब्जेक्ट ग्राफ़ का उपयोग कर सकते हैं।

+1

धन्यवाद, मैं अब पैटर्न का एक और अधिक साफ होता है। पैटर्न के बारे में घंटों के लिए Google के बाद, मुझे पैटर्न http://www.allappforum.com/java_design_patterns/creational_patterns.htm पुल पैटर्न के बारे में एक सरल उदाहरण है। स्विच नामक एक इंटरफ़ेस है, और दो उप-वर्गों को बल्ब और फैन कहा जाता है, प्रत्येक उप-वर्ग में स्विच के लिए अपना कार्यान्वयन होता है। एक अच्छा और सरल उदाहरण। – user200340

0

उपclass CircleShape कंस्ट्रक्टर 4 ड्रॉ लेता है, इसकी ड्रॉ() विधि में, पहले 3 तर्क 4 वें तर्क में पारित होते हैं जो DrawingAPI से कोई सबक्लास हो सकता है। तो क्या इसका मतलब यह है कि पुल पैटर्न का उपयोग लचीलापन बढ़ा सकता है? और क्या ऐसी चीजें हैं जो इस उदाहरण हमें बता सकती हैं?

यह केवल लचीलापन नहीं है। ब्रिज पैटर्न कार्यान्वयन से अमूर्तता को कम करता है और दोनों अलग-अलग भिन्न हो सकते हैं।

के बाद से CircleShape रचना का उपयोग करता है विरासत के बिना DrawingAPI को रोकने के लिए, आप DrawingAPI

Shape और CircleShape के कई कार्यान्वयन DrawingAPI पर निर्भरता के बिना स्वतंत्र रूप से बदल सकते हैं में से किसी एक के साथ DrawingAPI एपीआई बदल सकते हैं।

आप एसई पद है, जो विभिन्न उदाहरण बताते नीचे में पुल पैटर्न के बारे में और अधिक जानकारी प्राप्त कर सकते हैं:

Does the Bridge Pattern decouples an abstraction from implementation?

संबंधित मुद्दे