适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。 适配器又包含两种,一种是对象适配器,另一种是类适配器。 两者的区别:对象适配器采用组合的方式实现,类适配器采用继承的方式实现。
类适配器类图: 适配器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(); }}运行结果:
使用苹果充电器充电...使用安卓充电器充电...使用安卓充电器充电...新闻热点
疑难解答