将现有的不能满足需求的方法转换成功能相同的满足需求的方法,类适配器和对象适配器类似;而接口适配器还可以满足实现接口中的部分方法的要求。
类适配器模式
public class AC220 {
public void charge() {
System.out.println("AC220V");
}
}
public interface DC5 {
void charge5V();
}
public class VoltageAdapter extends AC220 implements DC5 {
@Override
public void charge5V() {
charge();
System.out.println("change DC5V");
}
}
@Test
public void classAdapterTest() {
DC5 voltageAdapter = new VoltageAdapter();
voltageAdapter.charge5V();
}
对象适配器
public class ObjectVoltageAdapter implements DC5 {
private AC220 sourceVoltage;
public ObjectVoltageAdapter(AC220 sourceVoltage) {
this.sourceVoltage = sourceVoltage;
}
@Override
public void charge5V() {
this.sourceVoltage.charge();
System.out.println("change DC5V");
}
}
@Test
public void objectAdapterTest() {
ObjectVoltageAdapter objectVoltageAdapter = new ObjectVoltageAdapter(new AC220());
objectVoltageAdapter.charge5V();
}
接口适配器
public interface Voltage {
void charge5V();
void charge9V();
}
public abstract class InterfaceVoltageAdapter implements Voltage {
protected AC220 sourceVoltage;
public InterfaceVoltageAdapter(AC220 sourceVoltage) {
this.sourceVoltage = sourceVoltage;
}
@Override
public void charge5V() {
}
@Override
public void charge9V() {
}
}
public class Voltage5VAdapter extends InterfaceVoltageAdapter {
public Voltage5VAdapter(AC220 sourceVoltage) {
super(sourceVoltage);
}
@Override
public void charge5V() {
sourceVoltage.charge();
System.out.println("change DC5V");
}
}
@Test
public void interfaceAdapterTest() {
Voltage5VAdapter voltage5VAdapter = new Voltage5VAdapter(new AC220());
voltage5VAdapter.charge5V();
InterfaceVoltageAdapter interfaceVoltageAdapter = new InterfaceVoltageAdapter(new AC220()) {
@Override
public void charge9V() {
sourceVoltage.charge();
System.out.println("change DC9V");
}
};
interfaceVoltageAdapter.charge9V();
}