设计模式13—Bridge设计模式

来源:互联网 发布:网络盒子怎么连接电视 编辑:程序博客网 时间:2024/05/17 11:33

Bridge桥接设计模式是将一组功能(实现)与另一组使用该功能的其他对象(行为)分离开来,以便达到单一因素变化,然后使用对象调用的方式将这两组关联起来,将问题的行为和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题。Bridge桥接设计模式结构如下:

还是以画图为例演示Bridge桥接设计模式,例子代码如下:

//行为

interface Shape{

public void doDraw();

}

class Circle implements Shape{

  private Drawing draw

  public Circle(Drawing draw){

      this.draw = draw;

  }

  public void doDraw(){

      draw.draw();

  }

}

class Rectangle implements Shape{

    private Drawing draw;

    public Rectangle(Drawing draw){

       this.draw = draw;

   }

  public void doDraw(){

     draw.draw();

  }

}

//实现

interface Drawing{

    public void draw();

 }

class SolidDrawing implements Drawing{

      public void draw(){

          System.out.println("Drawing solide line...");

      }

}

class DashDrawing implements Drawing{

      public void draw(){

          System.out.println("Drawing dash line...");

     }

}

public class BridgeDemo{

   public static void main(String[] args){

       //画一个实线的圆

      Drawing draw1 = new SolidDrawing();

      Shape shape1 = new Circle(draw1);

      shape1.doDraw();

    //画一个虚线的矩形

      Drawing draw2 = new DashDrawing();

      Shape shape2 = new Rectangle(draw2);

      shape2.doDraw();

   }

}

只从上面的例子代码可能还无法完全理解Bridge桥接设计模式,上面的圆形和矩形是行为,而实现画法和虚线画法则是实现,行为接口Shape通过聚合方式引用实现接口Drawing从而达到了行为和实现的桥接。如果需要增加第三种圆形三角形,则不会影响实现部分。如果增加第三种画法折线画法,则不会影响图像行为部分,将行为与实现松耦合分离。当系统有两个可变因素时,即问题行为和问题实现都在变化时,传统实现方式可能组合情况太多造成类爆炸,适合使用桥接模式。

学习设计模式的人经常分不清Bridge桥接设计模式和Strategy策略设计模式,个人感觉两者简单的区别如下:

(1)Bridge桥接设计模式中不但实现可以变化,问题行为也是可以变化的,且两者的变化时相互独立的,在两个维度都存在变化的情况下优先考虑使用桥接模式。

(2)Strategy策略设计模式中,仅仅存在算法实现策略的变化,问题行为是不变的,即仅有一个维度的变化。另外策略模式中考虑的算法层次的变化,是无状态、无数据的。

JDK中桥接模式的应用:

AWT

JDBC

0 0
原创粉丝点击