bridge(转载)

/** "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与模式》中桥梁模式的例子--飞机和飞机制造商是不是也是这种灵活变换的组合?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值