模式介绍
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
应用场景
生活中存在很多使用适配器模式的例子,例如国内电压是220V,国外是110V,所以去国外要买一个电压转换器,还有安卓数据线是大口的,苹果数据线是小口的,但是可以用一个转换头也能让安卓数据线给苹果手机充电。
例子说明
下面写个关于安卓数据线和苹果数据线的demo来实现适配器模式。
uml图
数据线大口
/**
* 大口
* @author S
*
*/
public interface BigPort {
public String useBigPort();
}
数据线小口
/**
* 小口
* @author S
*
*/
public interface SmallPort {
public String useSmallPort();
}
Android数据线
/**
* Android数据线
* @author S
*
*/
public class AndroidUsbLine implements BigPort{
@Override
public String useBigPort() {
// TODO Auto-generated method stub
return "Android数据线";
}
}
苹果数据线
/**
* 苹果数据线
* @author S
*
*/
public class IphoneUsbLine implements SmallPort{
@Override
public String useSmallPort() {
// TODO Auto-generated method stub
return "苹果数据线";
}
}
转换器
/**
* 转换器
* @author S
*
*/
public class UsbAdapter implements SmallPort{
private BigPort port;
public UsbAdapter(BigPort port){
this.port = port;
}
@Override
public String useSmallPort() {
// TODO Auto-generated method stub
return port.useBigPort();
}
}
Android手机
/**
* android手机
*/
public class Android {
/**
* 充电
* @param port
*/
public void charge(BigPort port){
System.out.println("Android手机使用"+port.useBigPort()+"充电");
}
}
苹果手机
/**
* 苹果手机
*/
public class Iphone {
/**
* 充电
* @param port
*/
public void charge(SmallPort port){
System.out.println("苹果手机使用"+port.useSmallPort()+"充电");
}
}
测试
/**
* 适配器模式
* @author S
*
*/
public class Main {
public static void main(String args[]){
//安卓手机充电
AndroidUsbLine line1 = new AndroidUsbLine();
Android android = new Android();
android.charge(line1);
//苹果手机充电
IphoneUsbLine line2 = new IphoneUsbLine();
Iphone iphone = new Iphone();
iphone.charge(line2);
SmallPort line3 = new UsbAdapter(line1);
iphone.charge(line3);
}
}
打印结果
Android手机使用Android数据线充电
苹果手机使用苹果数据线充电
苹果手机使用Android数据线充电