桥接模式的意图是:将抽象部分和实现部分分离,使他们都可以独立的变化;抽象部分是指依赖一组抽象操作的类,而实现部分相当于服务提供者
以下代码展示了一个桥接模式的例子,其中Road是实现部分,而Car是抽象部分,两者是聚合关系;Road有两个实现类:HighWay和Street;Car也有两个实现类:Benz和Audi,他们各自独立发展,互相之间没有强耦合关系,这样就可以使代码具有更高的可扩展性。
interface Road {
public void run();
}
class HighWay implements Road {
public void run(){
System.out.println("Run on Highway");
}
}
class Street implements Road {
public void run(){
System.out.println("Run on Street");
}
}
abstract class Car {
protected Road road;
public Car(Road road){
this.road = road;
}
public abstract void run();
}
class Benz extends Car{
public Benz(Road road){
super(road);
}
@Override
public void run(){
System.out.println("Benz");
road.run();
}
}
class Audi extends Car {
public Audi(Road road){
super(road);
}
@Override
public void run(){
System.out.println("Audi");
road.run();
}
}
下面我们来总结一下桥接模式的适用场景:
1. 系统的构件需要在抽象和实现之间保持更大的灵活性和可扩展性,避免两者之间的静态绑定
2. 设计要求抽象和实现的变化不会影响对方,确保他们可以在各自的维度自由发展