目录
类适配器
下面我们使用Mac电脑和U盘适配的一个简单实例来了解类适配器的实现方式。
首先创建一个Mac的接口有读写的数据的功能
public interface MacInterface {
void write(String msg);
String read();
}
然后有一个u盘的实例
public class UDisk {
public void byWrite(String msg){
System.out.println(msg);
}
public String byRead(){
return "拜登家谱";
}
}
但是mac接口直接连接u盘所以我们给它增加一个适配器,通过适配器连接两者。
public class MacUsbAdaptor extends UDisk implements MacInterface{
@Override
public void write(String msg) {
super.byWrite(msg);
}
@Override
public String read() {
return super.byRead();
}
}
public class AdaptorTest {
@Test
public void test(){
MacInterface macInterface = new MacUsbAdaptor();
System.out.println(macInterface.read());
macInterface.write("川普私密照片");
}
}
=====结果=====
拜登家谱
川普私密照片
对象适配器
使用和上面相同的实例,通过组合的方式来实现对象适配器。
public interface MacInterface {
void write(String msg);
String read();
}
public class UDisk {
public void byWrite(String msg){
System.out.println(msg);
}
public String byRead(){
return "拜登家谱";
}
}
public class MacUsbAdaptor implements MacInterface {
private UDisk disk;
public MacUsbAdaptor(UDisk disk) {
this.disk = disk;
}
@Override
public void write(String msg) {
//适配过程中肯定涉及到一些 “适配” 的过程,比如说统一格式
disk.byWrite(msg);
}
@Override
public String read() {
return disk.byRead();
}
}
public class AdaptorTest {
@Test
public void test(){
MacInterface macInterface = new MacUsbAdaptor(new UDisk());
System.out.println(macInterface.read());
macInterface.write("川普私密照片");
}
}
=====结果=====
拜登家谱
川普私密照片
两种适配器的选择
- 被适配的类(如UDisk)的接口(类里面的方法)不多,两者都可以
- 被适配的类的接口较多而且接口大多数都需要和接口类(如 MacInterface)中的方法适配,那么可以选择类适配器,这样可以复用被适配类中的方法,节省代码量。
- 被适配的类的接口较多而且其接口和接口类(如 MacInterface)中的方法适配的不多,那么可以选择对象适配器,组合相对于继承更加灵活。
使用场景
- 原有接口无法修改但又必须快速兼容新接口
- 不同数据格式、协议之间的转换
- 需要使用外部组件组合成新组件来提供功能,而又不想重复开发部分功能
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。