一. 定义
- 将抽象部分与它的实现部分分离,使他们都可以独立的变化。
- 如果系统中存在两个独立变化的维度,该模式可以将这两个维度分离出来,使两者可以独立扩展。桥接模式用抽象关联取代了传统的多层继承,将类之间的静态继承关系转为动态的对象组合关系,使得系统更加灵活且易于扩展,同时有效的控制了系统中类的个数。
- 抽象化:忽略一些信息,把不同的实体当做同样的实体对待,如:无论什么颜色的正方形都是正方形。
- 实现化:针对抽象化的具体实现就是实现化。如给正方形填充颜色。
- 脱耦:将抽象化和实现化之间的耦合解开,即:将他们间的强关联改成若关联,将继承关系改为关联关系。
二. 模式结构

1. Abstraction(抽象类)
- 用于定义抽象类的接口, 它一般是抽象类而不是接口,其中定义了一个Implementor(实现抽象类)类型的对象并可以维护该对象。
2. RefinedAbstraction(扩充抽象类)
- 具体实现类,实现了在抽象类中定义的抽象业务方法,也可以调用实现类接口中的业务方法。
3. Implementor(实现类接口)
4. ConcreteImplementor(具体实现类)
三. 实例

1. Color/Red/Blue
public interface Color {
void bepaint(String penType, String name);
}
public class Red implements Color{
@Override
public void bepaint(String penType, String name) {
System.out.println(penType+"红色的"+name);
}
}
public class Blue implements Color{
@Override
public void bepaint(String penType, String name) {
System.out.println(penType+"蓝色的"+name);
}
}
2. Pen/SmallPen/BigPen
public abstract class Pen {
protected Color color;
public void setColor(Color color) {
this.color=color;
}
public abstract void draw(String name);
}
public class SmallPen extends Pen{
@Override
public void draw(String name) {
String penType="小号笔绘制";
color.bepaint(penType, name);
}
}
public class BigPen extends Pen{
@Override
public void draw(String name) {
String penType="大号笔绘制";
this.color.bepaint(penType, name);
}
}
3. Client
public class Client
{
public static void main(String[] args) throws Exception
{
Color color=new Red();
Pen pen=new BigPen();
pen.setColor(color);
pen.draw("鲜花");
color=new Blue();
pen=new SmallPen();
pen.setColor(color);
pen.draw("天空");
}
}