23种设计模式之10.桥接模式

477 阅读1分钟

桥接模式是把抽象与具体的实现解耦,它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(interface)模式,它提供了抽象化和实现化之间的桥梁,来实现二者的解耦。

概念比较晦涩难懂,下面通过一个例子来理解一下桥接模式。

首先我们有一个驾驶的接口,驾驶自行车、驾驶小汽车都是实现了驾驶接口:

public interface Drive {
    void drive();
}

public class DriveBicycle implements Drive {
    @Override
    public void drive() {
        System.out.println("骑自行车");
    }
}

public class DriveCar implements Drive {
    @Override
    public void drive() {
        System.out.println("开小汽车");
    }
}

人类可以驾驶,通过抽象出一个人类驾驶抽象类,作为人和驾驶之间的桥梁,把这两者关联起来:

public abstract class PeopleDrice {
    protected Drive drive;

    protected PeopleDrice(Drive drive) {
        this.drive = drive;
    }

    public abstract void drive();
    
}

现在就可以继承PeopleDrice来让不同的的人体会驾驶的乐趣:

public class ManDrive extends PeopleDrice {

    public ManDrive(Drive drive) {
        super(drive);
    }

    @Override
    public void drive() {
        drive.drive();
    }

    public static void main(String[] args) {
        ManDrive manDrive = new ManDrive(new DriveBicycle());
        manDrive.drive();
        ManDrive manDrive1 = new ManDrive(new DriveCar());
        manDrive1.drive();
    }
}

运行结果如下图所示:

image.png

驾驶行为和人类是两个独立的系统,通过一个桥梁PeopleDrice就可以使这两者进行桥接。

桥接模式优点

  1. 抽象与实现进行分离。
  2. 良好的扩展性。扩展不用修改原有代码,符合开闭原则。
  3. 具体细节对使用者透明。在抽象层已经完成了封装。
  4. 可以极大的减少子类的个数,从而降低管理和维护的成本。

桥接模式缺点

  1. 会增加系统的复杂度。使系统难以理解,聚合关系在抽象层进行定义,这就要求开发者具有良好的抽象思维。