目录类适配器对象适配器选择两种适配器使用场景类适配器下面我们以Mac电脑与U盘适配的简单例子来了解类适配器的实现。先创建一个具有读写数据功能的Mac界面publicinterfaceMacInterface{voidwrite(Stringmsg);Stringread();}然后有一个U盘实例publicclassUDisk{publicvoidbyWrite(Stringmsg){System.out.println(msg);}publicStringbyRead(){返回“拜登家谱”;}}但是mac接口是直连u盘的,所以我们给它加一个adapter,通过adapter把两者连接起来。公共类MacUsbAdaptor扩展UDisk实现MacInterface{@Overridepublicvoidwrite(Stringmsg){super.byWrite(msg);}@OverridepublicStringread(){returnsuper.byRead();}}publicclassAdapterTest{@Testpublicvoidtest(){MacInterfacemacInterface=newMacUsbAdaptor();System.out.println(macInterface.read());macInterface.write("的私人照片");}}=====Result=====BidenGenealogyTrumpPrivatePhotosObjectAdapter使用与上述相同的实例,通过组合实现对象适配器。公共接口MacInterface{voidwrite(Stringmsg);Stringread();}publicclassUDisk{publicvoidbyWrite(Stringmsg){System.out.println(msg);}publicStringbyRead(){返回“拜登家谱”;}}publicclassMacUsbAdaptorimplementsMacInterface{privateUDiskdisk;publicMacUsbAdaptor(UDiskdisk){this.disk=disk;}@Overridepublicvoidwrite(Stringmsg){//适配过程必然涉及一些“适配匹配”的过程,比如统一格式disk.byWrite(msg);}@OverridepublicStringread(){returndisk.byRead();}}publicclassAdaptorTest{@Testpublicvoidtest(){MacInterfacemacInterface=newMacUsbAdaptor(newUDisk());System.out.println(macInterface.read());macInterface.write("的私人照片");}}=====Result=====BidenFamilyTree要适配的类(比如UDisk)的接口(类中的方法)不多,可以适配的类的接口很多两者都适配,而且大部分接口都需要兼容接口类(如MacInterface),可以选择类适配,可以复用适配类中的方法,节省代码。如果要适配的类有很多接口,接口类(如MacInterface)中的接口和方法适配不多,那么可以选择对象适配器,组合比继承更灵活。使用场景原有界面不能修改,必须快速兼容新界面。不同数据格式和协议之间的转换,需要借助外部组件组合成新的组件来提供功能,不想重复开发一些功能。
