桥接模式(Bridge)

  1. 定义
    它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。事物对象仅是一个抽象的概念。如“圆形”、“三角形”归于抽象的“形状”之下,而“画圆”、“画三角”归于实现行为的“画图”类之下,然后由“形状”调用“画图”。

  2. 类图


    Bridge.jpg
  3. 例子


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

补充

  • 感觉平时用过,但又不是特别清晰,我认为的是桥接更偏向于抽象,通过接口来改变结构,通过A调用B,B来调用C,而且有一个聚合的关系。

将抽象和实现放在两个不同的类层次中,使它们可以独立地变化。——《Head First 设计模式》

将类的功能层次结构和实现层次结构相分离,使二者能够独立地变化,并在两者之间搭建桥梁,实现桥接。—— 《图解设计模式》

桥接模式、代理模式、中介者模式、适配器模式的区别
  • 桥接强调『实现与抽象』分离
  • 代理强调『转接』(相同事物的转接)
  • 中介者强调『调和』(两个对象之间交流)
  • 适配器强调『适配』(自己处理好,不是转接也不是调和)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容