适配器模式是一种结构型设计模式。适配器模式的思想是:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
适配器有三种形式:类适配器,对象适配器,接口适配器
举例说明:
假如手机是typec类型的充电口,但是现在只有个传统的MicroUSB充电线,弄个转换接头,MicroUSB口转化成typec的。这就是适配器的应用。
-
传统的MicroUsb充电线
/** * MicroUSB充电线 */ public interface IMicroUSB { void isMicroUSB(); }
-
TypeC充电口
/** * TypeC的手机充电口 */ public interface ITypeC { void isTypeC(); }
类适配器
-
TypeC实现类
/** * TypeC实现类 */ public class TypeCImpl implements ITypeC { @Override public void isTypeC() { Log.i(TAG, "this is typeC 充电口"); } }
-
适配器Adapter,将MicroUsb转化成TypeC
public class AdapterMicroUsb extends TypeCImpl implements IMicroUSB { @Override public void isMicroUSB() { isTypeC(); } }
-
执行结果
/** * 类适配 */ IMicroUSB usb = new AdapterMicroUsb(); usb.isMicroUSB();
2020-05-30 22:04:58.660 23112-23112/com.demo.architedemo1 D/TypeCImpl: this is typeC 充电口
对象适配器
-
MicroUsb实现类
public class AdapterMicroUsbObject implements IMicroUSB { private ITypeC typeC; public AdapterMicroUsbObject(ITypeC type) { typeC = type; } @Override public void isMicroUSB() { typeC.isTypeC(); } }
-
执行结果
ITypeC typeC = new TypeCImpl(); IMicroUSB microUSB = new AdapterMicroUsbObject(typeC); microUSB.isMicroUSB();
2020-05-30 22:04:58.660 23112-23112/com.demo.architedemo1 D/TypeCImpl: this is typeC 充电口
接口适配器
接口适配器模式(缺省适配模式)的思想是,为一个接口提供缺省实现,这样子类可以从这个缺省实现进行扩展,而不必从原有接口进行扩展
-
大量接口类
/** * 存在大量方法的接口 */ public interface IMoreInterface { void test1(); void test2(); void test3(); void test4(); void test5(); void test6(); void test7(); void test8(); void test9(); }
-
抽象接口类
public abstract class AbsInterface implements IMoreInterface { @Override public void test1() { } @Override public void test2() { } @Override public void test3() { } @Override public void test4() { } @Override public void test5() { } @Override public void test6() { } @Override public void test7() { } @Override public void test8() { } @Override public void test9() { } }
-
实现类
public class MainTest extends AbsInterface { @Override public void test1() { super.test1(); } }
适配器模式的优缺点
优点
更好的复用性:系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
更好的扩展性:在实现适配器功能的时候,可以扩展自己源的行为(增加方法),从而自然地扩展系统的功能。
缺点
会导致系统紊乱:滥用适配器,会让系统变得非常零乱。例如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
参考链接:
https://blog.csdn.net/mrkohaku/article/details/79087688
https://www.cnblogs.com/eric-fang/p/9122564.html