适配器模式是把一个类的接口转变成客户端需要的另一个接口
有3中类型 类适配器,对象适配器和接口适配器
主要角色有三个类:
被适配类src
适配输出接口des
适配器adapter
运用场景:
将一个类转换成系统需要的另一个接口 (类适配器)
统一的输出接口,不同的输入类型(对象适配器)
想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。(接口适配器)
类适配器
adapter类通过继承被适配类src,实现输出接口Des,达到从src - > des的转变
/** * 被适配类 */ public class SrcVoltage { public int getVoltage() { System.out.println("源电压有220V"); return 220; } }
/** * 适配输出接口 */ interface DestinationVoltage { int getDestinationVoltage(); }
/** * 适配器类 */ public class VoltageAdapter extends SrcVoltage implements DestinationVoltage { @Override public int getDestinationVoltage() { System.out.println("适配器开始工作"); int voltage = getVoltage()/44; System.out.println("获取5V电压"); return voltage; } }
/** * 客户端类 */ public class Mobile { public void work(DestinationVoltage voltage) { if (voltage.getDestinationVoltage() == 5) { System.out.println("the mobile is working under five voltage"); }else { System.out.println("Voltage is not suited"); } } }
测试代码:
Mobile mobile = new Mobile();
mobile.work(new VoltageAdapter());
对象适配器
通过持有被适配器类的对象引用,实现适配输出接口达到src - > des的转变
/** * 对象适配器 */ public class VoltageAdapter2 implements DestinationVoltage { private SrcVoltage mSrcVoltage; public VoltageAdapter2(SrcVoltage mSrcVoltage) { this.mSrcVoltage = mSrcVoltage; } @Override public int getDestinationVoltage() { System.out.println("Object adapter start working"); int voltage = mSrcVoltage.getVoltage()/44; System.out.println("Adapter has finished"); return voltage; } }
测试代码:
mobile.work(new VoltageAdapter2(new SrcVoltage()));
接口适配器模式
当不需要全部实现接口提供的方法时,可以先设计一个抽象实现类,为该接口中的每个方法提供一个默认空实现,那么该抽象类的子类可以有选择的覆盖父类的方法,它适用于一个接口的实现类不想全部实现其方法的情况