介绍
将一个类的接口转换成客户期望的另一个接口,适配器让原本不兼容的类可以合作无间。适配器模式属于补偿模式,专用来在系统后期扩展、修改时使用
示例demo
背景:让原本只有安卓充电接口的旅店同样支持ios接口充电
一、对象适配器
安卓充电:
/**
* 安卓充电接口
**/
public interface AndroidCharge {
/**
* 充电方法
*/
void androidCharge();
}
/**
* 安卓充电
**/
public class Android implements AndroidCharge {
@Override
public void androidCharge() {
System.out.println("安卓接口充电");
}
}
旅馆:
/**
* 旅馆,只有Android充电口
**/
public class Hotel {
private AndroidCharge androidCharge;
public Hotel(AndroidCharge androidCharge) {
this.androidCharge = androidCharge;
}
/**
* 充电接口
*/
public void charge(){
this.androidCharge.androidCharge();
}
}
ios充电:
/**
* ios充电
**/
public interface IosCharge {
/**
* 充电方法
*/
void iosCharge();
}
/**
* ios充电口充电
**/
public class Ios implements IosCharge {
@Override
public void iosCharge() {
System.out.println("ios接口充电");
}
}
适配器:
/**
* 适配器接口
**/
public class ChargeAdapter implements AndroidCharge {
private IosCharge ios;
public ChargeAdapter(Ios ios) {
this.ios = ios;
}
@Override
public void androidCharge() {
ios.iosCharge();
}
}
测试类:
/**
* 适配器测试
**/
public class AdapterTest {
@Test
public void chargeTest() {
// 原本只有Android充电口
Hotel hotel = new Hotel(new Android());
hotel.charge();
System.out.println("*******************");
// 使用适配器之后旅馆支持ios充电了
ChargeAdapter chargeAdapter = new ChargeAdapter(new Ios());
hotel = new Hotel(chargeAdapter);
hotel.charge();
}
}
运行结果:
二、类适配器
和上述对象适配器不同的地方是 适配器类内容不同了
适配器:
/**
* 适配器接口,这里采用继承方式,不再持有ios对象了
**/
public class ChargeAdapter extends Ios implements AndroidCharge {
@Override
public void androidCharge() {
this.iosCharge();
}
}
测试类:
/**
* 适配器测试
**/
public class AdapterTest {
@Test
public void chargeTest() {
// 原本只有Android充电口
Hotel hotel = new Hotel(new Android());
hotel.charge();
System.out.println("*******************");
// 使用适配器之后旅馆支持ios充电了
ChargeAdapter chargeAdapter = new ChargeAdapter();
hotel = new Hotel(chargeAdapter);
hotel.charge();
}
}
运行结果: