首先申明两个互不相关的接口,一个用来定义Android充电线插口标准,一个定义IPhone 6充电线插口标准
Android插口标准
package com.adaptor;
public interface AndroidUsb {
public void ChargeToAndroid();
}
IPhone 6插口标准
package com.adaptor;
public interface AppleUsb {
public void ChargeToApple();
}
制作一根Android充电线
package com.adaptor;
public class ChargeAndroid implements AndroidUsb {
@Override
public void ChargeToAndroid() {
// TODO Auto-generated method stub
System.out.println("--> 当前只有安卓 USB线");
}
}
定义一个给IPhone充电过程
package com.adaptor;
public class Iphone6 {
private AppleUsb appleUsb;
public Iphone6() {
// TODO Auto-generated constructor stub
}
public Iphone6(AppleUsb appleUsb) {
this.appleUsb = appleUsb;
}
public AppleUsb getAppleUsb() {
return appleUsb;
}
public void setAppleUsb(AppleUsb appleUsb) {
this.appleUsb = appleUsb;
}
public void charge() {
System.out.println("--> 开始给IPhone 6充电");
appleUsb.ChargeToApple();
System.out.println("--> 给IPhone 6充电完成");
}
}
用转换套头制作一条伪IPhnoe 6 充电线
package com.adaptor;
public class AppleAdaptor implements AppleUsb {
private AndroidUsb androidUsb;
//构造一个带有安卓充电线的IPhone6套接插头
public AppleAdaptor(AndroidUsb androidUsb){
this.androidUsb = androidUsb;
}
@Override
//给IPhone6充电
public void ChargeToApple() {
// TODO Auto-generated method stub
//安卓充电线套接IPhone6插头的过程
androidUsb.ChargeToAndroid();
System.out.println("--> 使用套接转换插头");
}
}
执行用Android充电线给IPhone 6充电动作
package com.client;
import com.adaptor.AppleAdaptor;
import com.adaptor.AppleUsb;
import com.adaptor.ChargeAndroid;
import com.adaptor.Iphone6;
public class client {
/**
* @param args
* 适配器模式:将一个类的接口转化成用户需要的另一个接口。例如本例中就是将安卓的充电接口转化成IPhone的充电接口。
* 适配器模式使得原本由于接口不兼容而不能在一起工作的类可以在一起工作。
* 例子:假设有一个日志系统A暴露的接口只有Readlog(),并且ReadLog()类是封装好的。现在需要在日志读取后临时增加一个Updatelog()功能,为了不改变原有的类结构,就可以使用适配器类添加一个Update的功能。
* 使用场景:系统需要使用现有的类,但是现有的类忧不惧备完整的所需功能,就像ReadLog()基础上增加一个UpdateLog()例子一样。
* 或者是把两个及以上不太沾边(实现接口不兼容)的类糅合在一起使用是,本例中用安卓充电接口和IPhone充电接口明显不一样,但是非要用安卓线给IPhone充电也不是不行,加个转换器就是了。
* 非要把Iphone6.java类和ChargeAndroid。java类糅合在一起用,就只能使用Adaptor,因为它们接口不兼容。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//在安卓数据线上套一个IPhone6转换插头,使之成为伪苹果充电线
AppleUsb appleUsb = new AppleAdaptor(new ChargeAndroid());
//如果要给IPhone6充电,首先,得有一个IPhone6
Iphone6 iphone6 = new Iphone6();
//把充电线插在IPhone6上
iphone6.setAppleUsb(appleUsb);
//给IPhone6充电
iphone6.charge();
}
}