模式动机:
设想如果要绘制矩形、圆形、椭圆、正方形,我们至少
需要4个形状类,但是如果绘制的图形需要具有不同的
颜色,如红色、绿色、蓝色等,此时至少有如下两种设
计方案:
• 第一种设计方案是为每一种形状都提供一套各种颜色的版本。
• 第二种设计方案是根据实际需要对形状和颜色进行组合。
设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编量。它是一种对象型结构模式。
我所理解的所谓的桥接模式就是把复杂的具体对象拆分成不同的维度,例如例子中的图形,就把它拆分成形状和颜色两个维度。
此刻不禁想到了建造者模式。
实战演练
模拟毛笔
• 现需要提供大中小3种型号的画笔,能够绘制5种不
同颜色,如果使用蜡笔,我们需要准备3*5=15支
蜡笔,也就是说必须准备15个具体的蜡笔类。而如
果使用毛笔的话,只需要3种型号的毛笔,外加5个
颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。
本实例使用桥接模式来模拟毛笔的使用过程。
public interface Color
{
void bepaint(String penType,String name);
}
public abstract class Pen
{
protected Color color;
public void setColor(Color color)
{
this.color=color;
}
public abstract void draw(String name);
}
public class Black implements Color
{
public void bepaint(String penType,String name)
{
System.out.println(penType + "黑色的"+ name + ".");
}
}
public class BigPen extends Pen
{
public void draw(String name)
{
String penType="大号毛笔绘制";
this.color.bepaint(penType,name);
}
}
学完桥接模式忽然有点蒙,感觉和适配器模式挺像的,于是乎找了一篇解析觉得写得不错
桥接模式和适配器的区别