概述
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。
UML
栗子
/*汽车基类*/
public abstract class Car {
/**
* 安装导航仪
* @param navigator
*/
public abstract void installNavigator(INavigator navigator);
/**
* 开启导航
* 开启导航是调用导航接口实现类的方法
*/
public abstract void open();
}
/*宝马牌汽车*/
public class BMWCar extends Car {
/**导航仪*/
INavigator navigator = null;
@Override
public void installNavigator(INavigator n) {
System.out.println("宝马成功安装了:"+n.toString());
navigator = n;
}
@Override
public void open() {
navigator.work();
}
}
/*法拉利牌汽车*/
public class FerrariCar extends Car {
/**导航仪*/
INavigator navigator = null;
@Override
public void installNavigator(INavigator n) {
System.out.println("法拉利成功安装了:"+n.toString());
navigator = n;
}
@Override
public void open() {
navigator.work();
}
}
/*导航仪接口*/
public interface INavigator {
/**
* 导航实现
*/
void work();
}
/*高德导航仪*/
public class AmapNavigator implements INavigator {
@Override
public void work() {
System.out.println("我是高德导航仪!");
}
@Override
public String toString() {
return "【高德导航仪】";
}
}
/*北斗导航仪*/
public class BdNavigator implements INavigator {
@Override
public String toString() {
return "【北斗牌导航仪】";
}
@Override
public void work() {
System.out.println("我是北斗导航仪!");
}
}
测试
public class Main {
public static void main(String[] args) {
test1() ;
test1_1() ;
}
public static void test1(){
INavigator bdNavigator = new BdNavigator();
//法拉利安装北斗导航
Car ferrariCar = new FerrariCar() ;
ferrariCar.installNavigator(bdNavigator);
ferrariCar.open();
}
public static void test1_1(){
INavigator amapNavigator = new AmapNavigator();
//宝马安装了高德导航仪
Car ghostCar = new BMWCar();
ghostCar.installNavigator(amapNavigator);
ghostCar.open();
}
}
总结
原文:https://www.cnblogs.com/tanoak/p/10503886.html