概述
适配器是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。
问题
假如你在开发一个数据分析系统,它可以对传入的JSON数据进行分析。在开发过程中,你想整合第三方库直接使用第三方的现有接口,但遇到一个问题,那就是该库中只能处理XML数据,JSON格式显然无法使用现有的第三方接口。
解决方案
适配器模式就可以很好的解决这种问题,它可以将目标对象转换为接口所需要的对象,使其与接口进行正常交互。
结构
对象适配器
实现时使用了构成原则:适配器实现了目标接口,同时关联适配者对象。

类适配器
这一实现使用了继承机制:适配器同时继承两个对象的接口。
- 目标接口(Client Interface): 客户所期待的接口。可以是具体的或者抽象的类,也可以是接口。
- 适配者类(Service): 通常来自第三方或者历史程序接口。当前客户端使用的目标接口与现有类接口不兼容,不能直接使用其功能。
- 适配器(Adapter): 可以同时与目标接口和需要适配的接口进行交互。
优缺点
优点
- 满足单一职责原则,将需要适配的地方从业务代码中分离。
- 符合开闭原则,在目标接口不变的情况下,我们可以添加新类型的适配器。
缺点
代码复杂度增加
演示
现在有一个安卓充电线(可以给安卓手机充电),一个苹果手机。
/**
* 安卓充电线(目标接口)
*/
public class AndroidLine {
public void recharge(AndroidPhone androidPhone) {
System.out.println("充电完成");
}
}
/**
* 安卓手机(适配者类)
*/
public class AndroidPhone {
}
/**
* 苹果适配器(适配器)
*/
public class AppleAdapter extends AndroidPhone{
private ApplePhone applePhone;
public AppleAdapter(ApplePhone applePhone) {
converToAndroidPhone(applePhone);
}
private AndroidPhone converToAndroidPhone(ApplePhone applePhone) {
/*
* 业务处理
*/
return new AndroidPhone();
}
}
/**
* 客户端
* 有一个苹果手机,一个安卓充电线
*/
public class AdapterDemo {
public static void main(String[] args) {
// 安卓充电线
AndroidLine androidLine = new AndroidLine();
// 苹果手机
ApplePhone applePhone = new ApplePhone();
/*
正常应该是安卓线充安卓手机,但现在是一个苹果手机
这时候就可以做一个苹果适配器来完成安卓给苹果充电
androidLine.recharge(new AndroidPhone());
*/
androidLine.recharge(new AppleAdapter(applePhone));
}
}
总结
- 当你希望使用某个类,但是其接口与其他代码不兼容时,可以使用适配器类作为两者之间的转换器。
1964

被折叠的 条评论
为什么被折叠?



