桥接模式(bridge Pattern)用于把抽象化和实现化解耦,减少代码量,提升代码可维护性。
为了更好的理解本模式,我们以桥为例。
桥左边为安徽,右边为湖北。那么安徽有合肥、安庆和黄山市,湖北有武汉、黄冈和天门市。那么当我们从安徽,通过桥到湖北这些城市就是我们要实现的功能。
在此处,我们把到达地作为接口,从安徽出发来作为抽象类,为什么一定要分为抽象类和接口实现呢,那是因为此场景为二维,如果单一只使用接口或者抽象类,那么我们的实现类个数为N*N,使用桥接模式可以简化类的设计。
public interface Target {
void to();
}
public class WuHan implements Target {
@Override
public void to() {
System.out.println("到达武汉");
}
}
public class HuangGang implements Target {
@Override
public void to() {
System.out.println("到达黄冈");
}
}
public abstract class Source {
public Target target;
public Source(Target target) {
this.target = target;
}
abstract void from();
}
public class HeFei extends Source {
@Override
void from() {
System.out.print("从合肥出发");
super.target.to();
}
public HeFei(Target target) {
super(target);
}
}
public class AnQing extends Source {
public AnQing(Target target) {
super(target);
}
@Override
void from() {
System.out.print("从安庆出发");
super.target.to();
}
}
public class Test {
public static void main(String[] args) {
Target target = new WuHan();
Source source = new HeFei(target);
source.from();
}
}
从合肥出发到达武汉
Process finished with exit code 0