2022年2月12日 作者 zeroheart

桥接模式bridge

防止继承爆炸,把类的变化进行纬度的划分。

假设使用蜡笔作画,想要画出3种不同粗细,12种颜色,那么需要36个型号的笔(类)。如果我们划分之后,笔尖作为一个纬度,颜色作为一个纬度,只需要3+12=15个类,例子可能不太实际,不过比较容易理解。

前面的画笔就是多个继承(笔型号和颜料一起影响蜡笔),后面的画笔就是桥接模式(笔不同型号是一个变化维度,不同颜色的颜料是一个变化维度,两个维度不相互影响)。理解以后我们将其抽象成代码描述:

pen类是一个抽象类,里面有一个方法draw()。我们想要使用画笔,则需要放入一种颜色,然后执行draw方法将这种颜色画出来。

public abstract class Pen {
    public abstract void draw(Color color);
}

我们可以继承pen这个抽象类,来实现多种不同型号的笔。

public class PenOne extends Pen {
    public void draw(Color color) {
        System.out.println("当前一号笔在使用" + color.use() + "画画");    
    }
}
public class PenTwo extends Pen {
    public void draw(Color color) {
        System.out.println("当前二号笔在使用" + color.use() + "画画");    
    }
}

color是一个接口,实现类有red,blue等等若干。

public interface Color {

    public String use();
}
public class Blue implements Color {
    public String use() {
        return "蓝色";    
    }
}
public class Red implements Color {
    public String use() {
        return "红色";    
    }
}

然后我们就可以画画了:

public class User {
    public static void main(String[] args) {
        Pen pen = new PenOne();        
        pen.draw(new Red());    
    }
}

输出结果:当前一号笔在使用红色画画

这时我们拓展一种型号的画笔只需要新增一个Pen的实现类即可,颜料盒类不受影响;同理拓展颜料的数量,画笔不受影响。

桥接模式 | 菜鸟教程 (runoob.com) 参考文末的笔记,感谢这位朋友的笔记。