适配器模式
在我们的应⽤程序中我们可能需要将两个不同接⼝的类来进⾏通信,在不 修改这两个的前提下我们可能会需要某个中间件来完成这个衔接的过程。 这个中间件就是适配器。所谓适配器模式就是将⼀个类的接⼝,转换成客 户期望的另⼀个接⼝。它可以让原本两个不兼容的接⼝能够⽆缝完成对 接。 作为中间件的适配器将⽬标类和适配者解耦,增加了类的透明性和可复⽤ 性。
作为中间件的适配器将⽬标类和适配者解耦,增加了类的透明性和可复⽤ 。
类适配器:
对象适配器:
Target:
定义
Client
真正需要使⽤的接⼝。
Adaptee:
其中定义了⼀个已经存在的接⼝,也是我们需要进⾏适配的 接⼝。
Adapter:
对
Adaptee
和
Target
的接⼝进⾏适配,保证对
target
中接⼝ 的调⽤可以间接转换为对 Adaptee
中接⼝进⾏调⽤。中间商
适配器模式的优缺点
优点:
1.
提⾼了类的复⽤;
2.
组合若⼲关联对象形成对外提供统⼀服务的接⼝;
3.
扩展性、灵活性好。
缺点:
1.
过多使⽤适配模式容易造成代码功能和逻辑意义的混淆。
2.
部分语⾔对继承的限制,可能⾄多只能适配⼀个适配者类,⽽且⽬标类
必须是抽象类。
代码:
1. 原方法
public class SmsSimple {
public void send() {
System.out.println("老短信接口实现方法");
}
}
2 新抽象接口
public interface SmsService {
void sendSms();
}
3 对象适配器
/**
* 组合方式的适配器使用 对象适配器
* @author WHM
*
*/
public class SmsAdapter implements SmsService {
private SmsSimple simple;
public SmsAdapter(SmsSimple simple) {
this.simple = simple;
}
public void sendSms() {
System.out.println("转换成老接口过程");
System.out.println("----");
simple.send();
}
}
4. 类适配器
/**
* 继承方式的适配器使用 类适配器
* @author WHM
*
*/
public class SmsAdapter2 extends SmsSimple implements SmsService{
@Override
public void sendSms() {
System.out.println("转成成老接口过程");
super.send();
}
}
5 验证:
public class TMain {
public static void main(String[] args) {
//组合方式的适配器使用 对象适配器
// SmsSimple simple = new SmsSimple();
// SmsAdapter newSms = new SmsAdapter(simple);
// newSms.sendSms();
// 继承方式的适配器使用 类适配器
SmsAdapter2 sms2 = new SmsAdapter2();
sms2.sendSms();
}
}
结果:
Spring中DispatherServlet采用了适配器模式
总结:
适配器模式主要用于双方都无法改变的时候才会去使用的。当然在设计之初也有要考虑到的时候,比如需要跟第三方打交道。这时候我们不可能为了去迎合他的需求去改变自己的接口。所以这时候就需要使用适配器模式。