使用场景 实现方式
完成一个功能需要整合不同的维度,两个维度又不相干,不能是用继承去解决,这时候就使用桥接模式去实现 有几个定义不同维度动作的接口或者抽象类,通过一个Implementor 去组合他们不同的实现,例如有 a 与 b, 在 b 中 调用提供的 a
项目中实践 在做 IM 项目的时候使用了这种模式,具体地,就是桥接实现了消息处理和消息分发的功能,这样可以最小限度的影响原有代码,使得原来的代码不会受到大影响

架构图

package com.example.xpj.bridges;

public class DPBridge {
    // 抽象类,代表笔的维度
    public static abstract class Pen {
        protected Color color;
        public void setColor(Color color) {
            this.color = color;
        }
        public abstract void draw(String name);
    }

    // 扩充抽象类
    public static class SmallPen extends Pen {
        public void draw(String name) {
            String penType = "小号毛笔绘制";
            this.color.bepaint(penType, name);
        }
    }

    // 扩充抽象类
    public static class BigPen extends Pen {
        public void draw(String name) {
            String penType = "大号毛笔绘制";
            this.color.bepaint(penType, name);
        }
    }

    // 实现类接口,颜色的维度,这里实现笔和需要画画的组合
    public interface Color {
        void bepaint(String penType, String name);
    }

    // 扩充实现类
    public static class White implements Color {
        public void bepaint(String penType, String name) {
            System.out.println(penType + "白色的" + name + ".");
        }
    }

    // 扩充实现类
    public static class Black implements Color {
        public void bepaint(String penType, String name) {
            System.out.println(penType + "黑色的" + name + ".");
        }
    }

    // 客户端
    public static class DPBridgeClient {
        public void testBridge() {
            // 白色
            Color white = new White();
            Pen square = new BigPen();
            square.setColor(white);
            square.draw("乌拉拉");

            // 长方形
            Pen rectange = new SmallPen();
            rectange.setColor(new Black());
            rectange.draw("小黄狗");
        }
    }
}

总结

桥接模式最大功能就是放大了代码中组合这一功能,打破了 Java 或者 Kotlin 单继承的限制,使用起来对使用者暴露最少,可以专注于业务自己的代码实现而不侵入原有代码,因为这个 Bridge 可以自由无限组合。

来一张我自己项目中的类结构: