适配器模式(Adapter Pattern):
将一个类的接口适配成用户所期待的接口,又称为包装器(Wrapper)。
将一个类的接口转换成客户端期望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作,主要目的是兼容性,让原本因接口不匹配不能一起工作的俩个类可以协同工作;
一句话总结:适配成用户所期待的接口。
适配器模式分为三类:
类适配器模式、对象适配器模式和接口适配器模式;
适配器模式的角色:
目标接口(Target)、适配者(Adaptee)类和适配器( Adapter )类;
代码案例:
案例:手机充电,需将200V的电转化成5V,使用适配器模式实现~
实现方式1,类图:
实现方式1,代码:
/**
* 目标接口(Target)
*/public interface IElectric5Voltage {
/**
* 需要5伏电
* @return
*/public int get5Voltage();
}
/**
* 适配者(Adaptee)
*/public class Electric220Voltage {
/**
* 220伏电
* @return
*/public int getVoltage() {
return 220;
}
}
/**
* 适配器(Adapter)类
*/public class Electric5VoltageImpl extends Electric220Voltage implements IElectric5Voltage {
@ Override
public int get5Voltage() {
int v220 = super.getVoltage();
return v220/44;
}
}
public class Client {
public static void main(String[] args) {
/**
* 类适配器
*/IElectric5Voltage electric5Voltage = new Electric5VoltageImpl();
System.out.println("电压为:" + electric5Voltage.get5Voltage() + "伏");
}
}
实现方式2,类图:
实现方式2,类图:
/**
* 目标接口(Target)
*/public interface IElectric5Voltage {
/**
* 需要5伏电
* @return
*/public int get5Voltage();
}
/**
* 适配者(Adaptee)
*/public class Electric220Voltage {
/**
* 220伏电
* @return
*/public int getVoltage() {
return 220;
}
}
/**
* 适配器(Adapter)类
*/public class Electric5VoltageImpl implements IElectric5Voltage {
Electric220Voltage electric220Voltage = new Electric220Voltage();
@Override
public int get5Voltage() {
int v220 = electric220Voltage.getVoltage();
return v220 / 44;
}
}
public class Client {
public static void main(String[] args) {
/**
* 对象类适配器
*/IElectric5Voltage electric5Voltage = new Electric5VoltageImpl();
System.out.println("电压为:" + electric5Voltage.get5Voltage() + "伏");
}
}
基于接口的适配器模式:
/**
* 目标接口
*/public interface AdapterInterface {
public String a(String a);
public String b(String b);
public String c(String c);
}
/**
* 适配者
*/public class UserInterface {
public void print(AdapterInterface adapterInterface,String a) {
System.out.println(adapterInterface.a(a));
}
}
/**
* 适配器
*/public class EmptyAdapterInterface implements AdapterInterface {
@Override
public String a(String a) {
return "";
}
@Override
public String b(String b) {
return "";
}
@Override
public String c(String c) {
return "";
}
}
public class Client {
public static void main(String[] args) {
/**
* 接口类适配器
*/UserInterface userInterface = new UserInterface();
userInterface.print(new EmptyAdapterInterface() {
public String a(String a) {
return "适配器类:" + a;
}
}, "你好!");
}
}