一.什么使适配器模式?
- 将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
二.模式中的角色
- 目标角色(Target): 客气所期待的接口。目标可以是具体的或抽象的类,也可以是接口;
- 需要适配的类(Adaptee): 需要被适配的类或适配者类;
- 适配器(Adapter): 通过包装一个需要适配的对象,把原接口转换成目标接口。
三.工作中的场景
- 经常用来做旧系统改造和升级;
- 如果我们的系统开发之后再也不需要维护,那么很多模式都是没有必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍。
四.开发中的场景
- SpringMVC中的HandlerAdapter使用了适配器模式。处理器的类型不同,处理请求的方式也不同。
- JDBC驱动程序。不同的数据库提供商实现了不同的JDBC驱动接口,使用适配器模式可以将这些不同的接口适配为标准的JDBC接口,提高应用程序的可移植性。
五.举例代码实现
-
1.举例: 假如我们的鼠标不是USB接口,是传统的ps/2接口,没有办法连接我们的电脑,这个时候我们需要一个转换头,把传统的ps/2转换成USB。这里我们的转换头就是适配器对象,鼠标就是被适配器对象。
-
2.代码实现
-
(1)被适配对象(Adaptee)
java
/**
* 被适配器(相当于键盘)
*/
public class Adaptee {
public void request(){
System.out.println("可以完成客户请求的需要的功能!");
}
}
-
(2)目标角色(Target)
java
/**
* 相当于USB 接口
*/
public interface Target {
void handleReq();
}
-
(3)适配器(Adapter)
java
/**
* 适配器(相当于USB和ps/2转换器)
*/
public class Adapter extends Adaptee implements Target{
@Override
public void handleReq() {
super.request();
}
}
-
(4)调用
java
/**
* 相当于电脑(只有USB接口)
*/
public class App {
public void test(Target t) {
t.handleReq();
}
public static void main(String[] args) {
App c = new App();
c.test(new Adapter());
}
}
-
(5)使用组合的方式跟被适配对象整合
java
/**
* 类适配器(相当于转换器)
* (对象适配器,使用了组合的方式跟被适配对象整合)
*/
public class Adapter implements Target{
private Adaptee apadtee;
public Adapter(Adaptee apadtee) {
this.apadtee = apadtee;
}
@Override
public void handleReq() {
apadtee.request();
}
}
-
(6)调用
java
public class App {
public void test(Target t) {
t.handleReq();
}
public static void main(String[] args) {
App c = new App();
Target t=new Adapter(new Adaptee());
c.test(t);
}
}
更多设计模式学习:
设计模式持续更新中...