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) 参考文末的笔记,感谢这位朋友的笔记。