人在江湖

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

/** "Implementor" */

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 BridgePattern {

   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();

       }

   }

}

 

Bridge遵循的是接口隔离原则的典型。比如,随着时代的发展,枪在不停的变化改进。与此同时枪的子弹也在改进,很多子弹赋予了新功能:比如信号弹,救援弹,甚至是炸弹。这样,枪是抽象的同时,子弹也是抽象的。二者组合起来变换无穷。仔细想一下《java与模式》中桥梁模式的例子--飞机和飞机制造商是不是也是这种灵活变换的组合?

posted on 2011-02-08 17:19 人在江湖 阅读(850) 评论(0)  编辑  收藏 所属分类: design pattern

只有注册用户登录后才能发表评论。


网站导航: