桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
用手机举例子:手机品牌有vivo 小米手,机有翻盖机折叠机。传统方法时抽象一个手机类,vivo 小米分别继承手机类,翻盖机折叠机分别继承小米,vivo。导致后面的类越来越多,新加一个手机时要新增好多东西。现在创建一个接口brand品牌,分别用小米vivo去实现,抽象一个手机类,将brand聚合进去,由于多态的效果,可以将brand的实现类全部带入进去。再用折叠手机与翻盖手机去继承抽象手机类,在子类的方法中可以用brand里面的方法实现组合。可以理解将牌子接口注入固定的手机外壳。当新出现手机品牌,直接实现brand接口就行了,然后在抽象手机类的子类自由组合。
抽象phone类
abstract class phone {
public brand b;
void open() {
// TODO Auto-generated method stub
}
}
//接口品牌类
interface brand {
abstract void open();
}
//vivo手机
public class vivo implements brand {
@Override
public void open() {
System.out.println("vivo手机开机");
}
}
//折叠手机
class folderPhone extends phone {
public folderPhone(brand b1) {
this.b=b1;
}
@Override
void open() {
b.open();
System.out.println("折叠手机开机");
}
}
//这里只写了一个vivo类,当传入小米时会显示折叠的小米手机开机
public static void main(String[] args) {
folderPhone f=new folderPhone(new vivo());
f.open();
}
}
1) 实现了抽象和实现部分的分离,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助于 系统进行分层设计,从而产生更好的结构化系统。
2) 对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。
3) 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。