假如我的手机是typec类型的充电口,但是现在却只有个传统的MicroUSB充电线,怎么办?很简单,弄个转换接头,MicroUSB口转化成typec的,问题解决。这就是适配器的应用。
适配器就是个转化适配中间接口,可以将不匹配的两件事整合到一起,把不匹配变的匹配。
通常,适配器有三种:类适配器、对象适配器。
类适配器:继承实现,静态定义
对象适配器:代理实现,动态组合模式
一、类适配器
1.1、有个传统的Micro USB的充电线
package com.cn.adapter.classAdapter; /** * 有个传统的Micro USB的充电线 * * @author cfang * 2018年6月1日 下午4:13:01 */ public interface MicroUSB { void isMicroUSB(); }
1.2、手机充电口为typec
package com.cn.adapter.classAdapter; /** * 手机充电口为typec * * @author cfang * 2018年6月1日 下午4:14:28 */ public interface TypeC { void isTypeC(); }
package com.cn.adapter.classAdapter; public class TypeCImpl implements TypeC{ @Override public void isTypeC() { System.out.println("typec充电口"); } }
1.3、整个适配器adapter,将MicroUSB 转化成typec
package com.cn.adapter.classAdapter; /** * 用于将MicroUSB接口转化成tytpec接口 * * @author cfang * 2018年6月1日 下午4:46:28 */ public class Adapter extends TypeCImpl implements MicroUSB{ @Override public void isMicroUSB() { isTypeC(); } }
1.4、测试main方法
package com.cn.adapter.classAdapter; public class App { public static void main(String[] args) { MicroUSB microUSB = new Adapter(); microUSB.isMicroUSB(); } }
二、对象适配器
2.1、TypeC接口、MicroUSB接口以及实现同上
2.3、适配器类
package com.cn.adapter.objectAdapter; import com.cn.adapter.classAdapter.MicroUSB; import com.cn.adapter.classAdapter.TypeC; public class Adapter implements MicroUSB{ private TypeC typeC; public Adapter(TypeC typeC){ this.typeC = typeC; } @Override public void isMicroUSB() { typeC.isTypeC(); } }
2.4、测试main方法
package com.cn.adapter.objectAdapter; import com.cn.adapter.classAdapter.MicroUSB; import com.cn.adapter.classAdapter.TypeC; import com.cn.adapter.classAdapter.TypeCImpl; public class App { public static void main(String[] args) { TypeC typeC = new TypeCImpl(); MicroUSB microUSB = new Adapter(typeC); microUSB.isMicroUSB(); } }
三、很多时候,还会遇到一种适配器,接口的适配器,很简单,假如有个很大的接口,几十个方法,但是并不是每个实现该接口的都必须得实现所有方法,此时,就可以做个抽象的中间类,实现大接口,方法实现都是空。之后开发,都继承这个抽象类,用哪些方法,就覆写哪些方法。
1 package com.example.springboot.dto; 2 3 public interface A { 4 void a0(); 5 void a1(); 6 void a2(); 7 void a3(); 8 void a4(); 9 } 10 11 /** 12 * 接口适配器 13 */ 14 public abstract class Adapter implements A { 15 16 public void a0() { 17 18 } 19 20 public void a1() { 21 22 } 23 24 public void a2() { 25 26 } 27 28 public void a3() { 29 30 } 31 32 public void a4() { 33 34 } 35 } 36 public class B extends Adapter{ 37 38 public void a2() { 39 super.a2(); 40 } 41 }