设计模式 - 适配器模式(Adapter_pattern)【摘自 wikipedia】
适配器设计模式描述了如何解决此类问题:
- 定义一个单独的
adapter类,将类 (adaptee)的(不兼容)接口转换为target客户端需要的另一个接口 ( )。 - 通过
adapter处理(重用)没有所需接口的类。
这种模式的关键思想是通过一个单独的方法adapter来适应(已经存在的)类的接口而不改变它。
示例
interface LightningPhone { void recharge(); void useLightning(); } interface MicroUsbPhone { void recharge(); void useMicroUsb(); } class Iphone implements LightningPhone { private boolean connector; @Override public void useLightning() { connector = true; System.out.println("Iphone Lightning connected"); } @Override public void recharge() { if (connector) { System.out.println("Iphone Recharge started"); System.out.println("Iphone Recharge finished"); } else { System.out.println("Iphone Connect Lightning first"); } } } class Android implements MicroUsbPhone { private boolean connector; @Override public void useMicroUsb() { connector = true; System.out.println("Android MicroUsb connected"); } @Override public void recharge() { if (connector) { System.out.println("Android Recharge started"); System.out.println("Android Recharge finished"); } else { System.out.println("Android Connect MicroUsb first"); } } } /* exposing the target interface while wrapping source object */ class LightningToMicroUsbAdapter implements MicroUsbPhone { private final LightningPhone lightningPhone; public LightningToMicroUsbAdapter(LightningPhone lightningPhone) { this.lightningPhone = lightningPhone; } @Override public void useMicroUsb() { System.out.println("LightningToMicroUsbAdapter MicroUsb connected"); lightningPhone.useLightning(); } @Override public void recharge() { lightningPhone.recharge(); } } public class AdapterDemo { static void rechargeMicroUsbPhone(MicroUsbPhone phone) { phone.useMicroUsb(); phone.recharge(); } static void rechargeLightningPhone(LightningPhone phone) { phone.useLightning(); phone.recharge(); } public static void main(String[] args) { Android android = new Android(); Iphone iPhone = new Iphone(); System.out.println("-1- Recharging android with MicroUsb"); android.useMicroUsb(); android.recharge(); System.out.println(""); System.out.println("-2- Recharging iPhone with Lightning"); iPhone.useLightning(); iPhone.recharge(); System.out.println(""); System.out.println("-3- Recharging iPhone with MicroUsb"); LightningToMicroUsbAdapter lightningToMicroUsbAdapter = new LightningToMicroUsbAdapter(iPhone); lightningToMicroUsbAdapter.useMicroUsb(); lightningToMicroUsbAdapter.recharge(); } }
输出
-1- Recharging android with MicroUsb Android MicroUsb connected Android Recharge started Android Recharge finished -2- Recharging iPhone with Lightning Iphone Lightning connected Iphone Recharge started Iphone Recharge finished -3- Recharging iPhone with MicroUsb LightningToMicroUsbAdapter MicroUsb connected Iphone Lightning connected Iphone Recharge started Iphone Recharge finished
浙公网安备 33010602011771号