适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。
适配器又包含两种,一种是对象适配器,另一种是类适配器。
两者的区别:对象适配器采用组合的方式实现,类适配器采用继承的方式实现。
类适配器类图:
适配器Adapter继承Adaptee并实现Target接口来实现。
对象适配器类图:
适配器Adapter实现Target接口,在request方法中调用Adaptee对象的具体实现。
下面结合充电器适配器的例子来说明。
类图:
这个例子是通过适配器来使用安卓充电器给苹果设备充电。chargeAdapter的实现方式不同决定了是类适配器还是对象适配器。
接口AndroidCharger代码实现:
public interface AndroidCharger {
public void charge();
}
AndroidCharge类代码实现:
public class AndroidCharge implements AndroidCharger{
@Override
public void charge() {
// TODO Auto-generated method stub
System.out.println("使用安卓充电器充电...");
}
}
接口AppleCharger代码实现:
public interface AppleCharger {
public void charge();
}
AppleCharge类代码实现:
public class AppleCharge implements AppleCharger{
@Override
public void charge() {
// TODO Auto-generated method stub
System.out.println("使用苹果充电器充电...");
}
}
对象适配器ChargeAdapter代码实现:
public class ChargeAdapter implements AppleCharger{
AndroidCharger androidCharger;
public ChargeAdapter(AndroidCharger androidCharger){
this.androidCharger = androidCharger;
}
@Override
public void charge() {
// TODO Auto-generated method stub
androidCharger.charge();
}
}
类适配器ChargeAdapter2代码实现:
public class ChargeAdapter2 extends AndroidCharge implements AppleCharger{
}
Client类代码实现:
public static void main(String[] args){
AppleCharger appleCharger = new AppleCharge();
appleCharger.charge();
//使用对象适配器模式
AndroidCharger androidCharger = new AndroidCharge();
ChargeAdapter adapter = new ChargeAdapter(androidCharger);
adapter.charge();
//使用类适配器模式
ChargeAdapter2 adapter2 = new ChargeAdapter2();
adapter2.charge();
}
}
运行结果:
使用苹果充电器充电...
使用安卓充电器充电...
使用安卓充电器充电...