一. 定义

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

二. 模式结构

uTools_1687592003792.png

1. Abstraction(抽象类)

  • 用于定义抽象类的接口, 它一般是抽象类而不是接口,其中定义了一个Implementor(实现抽象类)类型的对象并可以维护该对象。

2. RefinedAbstraction(扩充抽象类)

  • 具体实现类,实现了在抽象类中定义的抽象业务方法,也可以调用实现类接口中的业务方法。

3. Implementor(实现类接口)

  • 定义了实现类的接口。

4. ConcreteImplementor(具体实现类)

  • 实现了实现类接口中的方法。

三. 实例

uTools_1687592767901.png

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("天空");
    }
}