<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Chan Chen Coding...

    Five: Bridge Design Pattern

    “Decouple an abstraction from its implementation so that the two can vary independently” is the intent for bridge design pattern as stated by GoF.
    Bridge design pattern is a modified version of the notion of “prefer composition over inheritance”.
    Problem and Need for Bridge Design Pattern
    When there are inheritance hierarchies creating concrete implementation, you loose flexibility because of interdependence. Oops! these kind of sentencies shows that the author(I) didn’t understand and tries to escape! Okay, I will decrypt this sentence in the coming paragraphs.
    Decouple implentation from interface and hiding implementation details from client is the essense of bridge design pattern.
    Elements of Bridge Design Pattern
    Abstraction – core of the bridge design pattern and defines the crux. Contains a reference to the implementer.
    Refined Abstraction – Extends the abstraction takes the finer detail one level below. Hides the finer elements from implemetors.
    Implementer - This interface is the higer level than abstraction. Just defines the basic operations.
    Concrete Implementation – Implements the above implementer by providing concrete implementation.
    Example for core elements of Bridge Design Pattern
    Vehicle -> Abstraction
    manufacture()
    Car -> Refined Abstraction 1
    manufacture()
    Bike -> Refined Abstraction 2
    manufacture()
    Workshop -> Implementor
    work()
    Produce -> Concrete Implementation 1
    work()
    Assemble -> Concrete Implementation 2
    work()
    Generic UML Diagram for Bridge Design Pattern
    Before Bridge Design Pattern
    After Bridge Design Pattern
    Sample Java Code for Bridge Design Pattern
    package com.javapapers.designpattern;
     
    /**
     * abstraction in bridge pattern
     * */
    abstract class Vehicle {
      protected Workshop workShop1;
      protected Workshop workShop2;
     
      protected Vehicle(Workshop workShop1, Workshop workShop2) {
        this.workShop1 = workShop1;
        this.workShop2 = workShop2;
      }
     
      abstract public void manufacture();
    }
     
    package com.javapapers.designpattern;
     
    /**
     * Refine abstraction 1 in bridge pattern
     */
    public class Car extends Vehicle {
     
      public Car(Workshop workShop1, Workshop workShop2) {
        super(workShop1, workShop2);
      }
     
      @Override
      public void manufacture() {
        System.out.print("Car ");
        workShop1.work();
        workShop2.work();
     
      }
     
    }
     
    package com.javapapers.designpattern;
     
    /**
     * Refine abstraction 2 in bridge pattern
     */
    public class Bike extends Vehicle {
     
      public Bike(Workshop workShop1, Workshop workShop2) {
        super(workShop1, workShop2);
      }
     
      @Override
      public void manufacture() {
        System.out.print("Bike ");
        workShop1.work();
        workShop2.work();
      }
     
    }
     
    package com.javapapers.designpattern;
     
    /**
     * Implementor for bridge pattern
     * */
    public interface Workshop {
      abstract public void work();
    }
     
    package com.javapapers.designpattern;
     
    /**
     * Concrete implementation 1 for bridge pattern
     * */
    public class Produce implements Workshop {
     
      @Override
      public void work() {
        System.out.print("Produced");
      }
     
    }
     
    package com.javapapers.designpattern;
     
    /**
     * Concrete implementation 2 for bridge pattern
     * */
    public class Assemble implements Workshop {
     
      @Override
      public void work() {
        System.out.println(" Assembled.");
      }
     
    }
     
    package com.javapapers.designpattern;
     
    /*
     * Demonstration of bridge design pattern
     */
    public class BridgePattern {
     
      public static void main(String[] args) {
     
        Vehicle vehicle1 = new Car(new Produce(), new Assemble());
        vehicle1.manufacture();
        Vehicle vehicle2 = new Bike(new Produce(), new Assemble());
        vehicle2.manufacture();
     
      }
    }
     
    Output:
    Car Produced Assembled.
    Bike Produced Assembled.
    Summary of Bridge Design Pattern
    Creates two different hierarchies. One for abstraction and another for implementation.
    Avoids permanent binding by removing the dependency between abstraction and implementation.
    We create a bridge that coordinates between abstraction and implementation.
    Abstraction and implementation can be extended separately.
    Should be used when we have need to switch implementation at runtime.
    Client should not be impacted if there is modification in implementation of abstraction.
    Best used when you have multiple implementations.
    Bridge Vs Adapter Design Pattern
    The adapter design pattern helps it two incompatible classes to work together. But, bridge design pattern decouples the abstraction and implementation by creating two different hierarchies.


    -----------------------------------------------------
    Silence, the way to avoid many problems;
    Smile, the way to solve many problems;

    posted on 2012-11-01 16:00 Chan Chen 閱讀(243) 評論(0)  編輯  收藏 所屬分類: Design Pattern

    主站蜘蛛池模板: 久久综合国产乱子伦精品免费| 亚洲成a人片在线观看中文!!!| 日本亚洲高清乱码中文在线观看| 亚洲一级毛片免费看| 亚洲av永久无码精品表情包| 国产精品福利片免费看| 国产亚洲精品a在线无码| 天黑黑影院在线观看视频高清免费 | 亚洲国产无套无码av电影| 国产免费伦精品一区二区三区| 亚洲av无码成人精品区在线播放| 免费看黄福利app导航看一下黄色录像| 日本一线a视频免费观看| 国产精品亚洲色婷婷99久久精品| 日本免费一区二区三区最新 | 亚洲色精品vr一区二区三区| 成人妇女免费播放久久久| 久久精品国产精品亚洲蜜月| 久久九九全国免费| 亚洲国产成人精品无码一区二区| 免费A级毛片无码免费视| 亚洲AV成人无码久久WWW| 亚洲精品无码久久久| 日本一区午夜艳熟免费| 亚洲成a人片在线观看中文!!! | 久久亚洲国产精品123区| 久久青青草原国产精品免费| 亚洲精品偷拍无码不卡av| 免费看AV毛片一区二区三区| 四虎影视永久在线精品免费| 国产AV无码专区亚洲Av| 国产99视频精品免费观看7| 久久久亚洲精华液精华液精华液| 亚洲区不卡顿区在线观看| 999任你躁在线精品免费不卡| 亚洲一区二区三区国产精华液| 亚洲国产a级视频| 99re在线这里只有精品免费| 亚洲AV无码国产剧情| 亚洲AV无码第一区二区三区| 久久久久久国产精品免费免费|