<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 閱讀(237) 評論(0)  編輯  收藏 所屬分類: Design Pattern

    主站蜘蛛池模板: a一级毛片免费高清在线| 免费亚洲视频在线观看| 老汉精品免费AV在线播放| 亚洲欧洲国产精品香蕉网| 成在人线av无码免费高潮水| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 99视频在线免费| 亚洲成av人在线视| 97青青草原国产免费观看| 久久伊人久久亚洲综合| 全部免费毛片在线播放| 亚洲国产精品SSS在线观看AV| 亚洲综合激情视频| 在线看免费观看AV深夜影院| 337p欧洲亚洲大胆艺术| 国产黄色免费网站| 亚洲成a∨人片在无码2023 | 18级成人毛片免费观看| 亚洲精品福利视频| 免费看美女裸露无档网站| 中中文字幕亚洲无线码| 成人免费无码精品国产电影| 免费激情网站国产高清第一页| 国产福利视精品永久免费| 久久99亚洲综合精品首页| 久久精品电影免费动漫| 亚洲一卡2卡3卡4卡国产网站| 成人免费网站久久久| 亚洲成av人在线视| 免费理论片51人人看电影| 一个人看的免费观看日本视频www| 四虎永久在线精品免费观看视频| 亚洲熟妇丰满多毛XXXX| 青青视频观看免费99| 久久亚洲AV成人无码国产最大| 97在线视频免费| 亚洲一级毛片中文字幕| 亚洲福利视频一区二区| 99ee6热久久免费精品6| 狠狠入ady亚洲精品| 亚洲a一级免费视频|