桥接模式是用于“把抽象和实现分开,这样它们就能独立变化”。 桥接模式使用了封装、聚合,可以用继承将不同的功能拆分为不同的类。
在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。
例如汽车在路上行驶的来说。即有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,然而它们所行驶的环境(路)也在变化,在软件系统中就要适应两个方面的变化
上代码,
public abstract class AbstractCar {
abstract void run();
}
public abstract class AbstractRoad {
AbstractCar aCar;
public abstract void run();
}
public class SpeedWay extends AbstractRoad {
@Override
public void run() {
aCar.run();
System.out.println("在高速公路行驶");
}
}
public class Street extends AbstractRoad {
@Override
public void run() {
aCar.run();
System.out.println("在市区街道行驶");
}
}
public class Bus extends AbstractCar {
@Override
void run() {
System.out.print("公交车");
}
}
public class Car extends AbstractCar {
@Override
void run() {
System.out.print("小汽车");
}
}
public class Test {
public static void main(String[] args) {
AbstractRoad speedWay = new SpeedWay();
speedWay.aCar = new Car();
speedWay.run();
AbstractRoad street = new Street();
street.aCar = new Bus();
street.run();
}
}