适配的是类和接口中对应的一个方法(功能相同的方法)
1、类适配器
Adapter类,通过继承src类、实现dst接口,完成src->dst的适配
例如:充电器(Adapter)、220V交流电(src类)、5V直流电(dst)
public class Voltage220V {
public int output220V() {
return 220;
}
}
public interface IVoltage5V {
public int output5V();
}
public class VoltageAdapter extends Voltage220V implements IVoltage5V {
@Override
public int output5V() {
int srcV = output220V();//适配器要用到220V的方法====》充电器要接触到220V
int dstV = srcV / 44 ;
return dstV;
}
}
public class Phone {
public void charging(IVoltage5V iVoltage5V) {
if(iVoltage5V.output5V() == 5) {
System.out.println("可以充电。。。");
} else if (iVoltage5V.output5V() > 5) {
System.out.println("不可以充电。。。");
}
}
}
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
phone.charging(new VoltageAdapter()); //输出结果:可以充电。。。
}
}
2、对象适配器
与类适配器相同,不同的一点是不是继承220V,而是组合了220V
public class Voltage220V {
public int output220V() {
return 220;
}
}
public interface IVoltage5V {
public int output5V();
}
public class VoltageAdapter implements IVoltage5V {
private Voltage220V voltage220V;
public VoltageAdapter(Voltage220V voltage220v) {
this.voltage220V = voltage220v;
}
@Override
public int output5V() {
int dst = 0;
if(null != voltage220V) {
int src = voltage220V.output220V();
dst = src / 44;
}
return dst;
}
}
public class Phone {
public void charging(IVoltage5V iVoltage5V) {
if(iVoltage5V.output5V() == 5) {
System.out.println("可以充电。。。");
} else if (iVoltage5V.output5V() > 5) {
System.out.println("不可以充电。。。");
}
}
}
public class Client {
public static void main(String[] args) {
Phone phone = new Phone();
phone.charging(new VoltageAdapter(new Voltage220V())); //可以充电。。。
}
}
3、接口适配器模式
适用于不需要实现接口的所有方法时
当不需要实现接口的全部方法时,我们可以设计一个实现该接口的抽象类,并且重写接口中的所有方法(重写后的方法体为空),这样该抽象类的子类可以选择性实现方法。