定义
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body
)模式或接口(Interface
)模式。
目的
桥梁模式的用意是”将抽象化(Abstraction
)与实现化(Implementation
)脱耦,使得二者可以独立地变化”。这句话有三个关键词,也就是抽象化、实现化和脱耦。
- 结构
结构
角色 | 类型 | 职责 |
---|---|---|
Implementor | 实现化角色 | 他是接口或者抽象类,定义角色必须的属性和行为 |
Abstraction | 抽象化角色 | 定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类 |
ConcreteImplementorA ConcreteImplementorB | 修正实现化角色 | 它实现接口或抽象类定义的方法和属性 |
RefinedAbstraction | 修正抽象化角色 | 它引用实现化角色,对抽象化角色进行修改 |
最佳实践
汽车品牌内置导航仪,我们希望实现,每个品牌的导航仪都可以在任何一个牌子的汽车上安装并启动。
导航插件的公共接口,定义了导航的行为方法
// this is Implementor
public interface Navigator {
// base method
public void work();
public void getName();
}
// this is ConcreteImplementorA
public class NavigatorX implements Navigator{
@Override
public void work() {
// do something
}
@Override
public void getName(){
System.out.println("我是X导航,很高兴为你服务!");
}
}
// this is ConcreteImplementorB
public class NavigatorY implements Navigator{
@Override
public void work() {
// do something
}
@Override
public void getName(){
System.out.println("我是Y导航,很高兴为你服务!");
}
}
- 汽车品牌抽象类,这个抽象类主要是导航的安装与启动
// this is Abstraction
public abstract class AbstractVehicleBrand {
private Navigator navigator
public abstract void install(Navigator navigator){
this.navigator = navigator;
}
public abstract void open(){
this.navigator.work();
}
public Navigator getNavigator(){
retur this.navigator;
}
}
// this is RefinedAbstraction
public class VehicleA extends AbstractVehicleBrand{
@Override
public void install(Navigator navigator) {
super(navigator);
}
/*
* 修正父类行为
*/
@Override
public void open() {
super.open();
super.getNavigator().getName();
}
}
- 客户端
public class Client {
public static void main(String[] args){
INavigator navigatorX = new NavigatorX();
INavigator navigatorY = new NavigatorYN();
AbstractVehicleBrand vehicleA = new VehicleA();
vehicleA.install(navigatorX);
vehicleA.open();
AbstractVehicleBrand vehicleA = new VehicleA();
vehicleA.install(navigatorY);
vehicleA.open();
}
使用场景
多个具有变化的分类共同实现功能时易采用桥接模式