bridge(转载)

    技术2024-11-18  55

    /** "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)