介绍 Java 适配器模式
本文我们探讨下Java实现适配器模式。
适配器模式两个不兼容接口的连接器,因为两者不能直接连接。适配器使用新的接口包装已经存在的类,这样使其与客户端接口兼容。
使用该模式的目的是转换已经存在接口至另一个客户端期望的接口。通常在应用程序被设计好之后实现。
示例说明
假设一个场景,一个应用在美国开发,其返回豪华汽车最高速度每小时多少英里。现在英国需要使用同样的应用,但其速度需要返回每小时多少公里。为了解决该问题,我们创建一个适配器负责转换速度为我们期望的结果。
首先,我们创建原接口Movable,其支持按照每小时多少英里的速度返回豪华汽车的速度:
public interface Movable {
// returns speed in MPH
double getSpeed();
}
现在我们创建该接口一个具体实现:
public class BugattiVeyron implements Movable {
@Override
public double getSpeed() {
return 268;
}
}
现在我们创建一个适配器MovableAdapter,与原Movable类类似,但需要稍微修改下,获得我们需要的速度表示方式:
public interface MovableAdapter {
// returns speed in KM/H
double getSpeed();
}
该接口实现包括一个私有方法,其负责速度转换:
public class MovableAdapterImpl implements MovableAdapter {
private Movable luxuryCars;
// standard constructors
@Override
public double getSpeed() {
return convertMPHtoKMPH(luxuryCars.getSpeed());
}
private double convertMPHtoKMPH(double mph) {
return mph * 1.60934;
}
}
现在可以通过适配器使用获取速度方法,会返回我们需要的结果,下面测试结果符合预期:
@Test
public void whenConvertingMPHToKMPH_thenSuccessfullyConverted() {
Movable bugattiVeyron = new BugattiVeyron();
MovableAdapter bugattiVeyronAdapter = new MovableAdapterImpl(bugattiVeyron);
assertEquals(bugattiVeyronAdapter.getSpeed(), 431.30312, 0.00001);
}
我们看到,适配器实现了该场景的转换:从268mph 至 431 km/h。
适配器应用场景
-
当外部组件提供了我们希望重用的功能,但其与我们的应用不兼容。这时定义合适的适配器使其彼此兼容。
-
当我们的应用于客户端希望的接口不兼容时。
-
当我们的应用想重用遗留的代码,但有不想修改原来的代码。
总结
本文我们通过示例探讨了适配器模式。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/89738617