2022年2月12日
桥接模式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) 参考文末的笔记,感谢这位朋友的笔记。