适配器模式
前置知识
生活中的场景
适配器adapter模式
- 什么是适配器模式?
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原 本由于接口不兼容而不能一起工作的那些类可以在一起工作。
- 模式中的角色
- 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象 的类,也可以是接口。
- 需要适配的类(Adaptee):需要适配的类或适配者类。
- 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成 目标接口。
产品解决方案
- 下面的场景,如何解决?
- 适配器模式解决方案:
示例
分为两种方式来实现
- 适配器实现方式一(类继承,修改比较麻烦)
- 适配器实现方式二 适配器(类构造传参)
- 被适配的类
Adaptee
/**
* 被适配的类
* 相当于:PS/2 键盘
*/
public class Adaptee {
public void request(){
System.out.println("可以完成客户请求的功能!");
}
}
- 适配器实现方式一(类继承,修改比较麻烦)
/**
* 适配器(类继承,修改比较麻烦)
*/
public class Adapter extends Adaptee implements Target{
//与被适配器进行关联 继承
@Override
public void handleReq() {
super.request();
}
}
- Target 中间 耦合接口
public interface Target {
void handleReq();
}
- 客户端类
/**
* 客户端类
* 相当于例子中的笔记本,只有USB接口
*/
public class LaptopClient {
public void test1(Target t){
t.handleReq();
}
public static void main(String[] args) {
LaptopClient laptopClient = new LaptopClient();
Target t = new Adapter();
laptopClient.test1(t);
}
}
运行结果
- 适配器实现方式二 适配器(类构造传参)
/**
* 适配器(类构造传参)
*/
public class Adapter2 implements Target{
private Adaptee adaptee;
public Adapter2(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handleReq() {
adaptee.request();
}
- 修改客户端进行测试
/**
* 客户端类
* 相当于例子中的笔记本,只有USB接口
*/
public class LaptopClient {
public void test1(Target t){
t.handleReq();
}
public static void main(String[] args) {
LaptopClient laptopClient = new LaptopClient();
Target t = new Adapter2(new Adaptee());
laptopClient.test1(t);
}
}
运行截图