https://www.bilibili.com/video/av29579073/?p=10
今天我来介绍一下适配器模式,首先解释一下这个名词。在生活中我们遇见过功率转换器,将大功率转换为我们电器适合的小功率,那么在设计模式中也是存在这样的情况。如果两个类之间互相不兼容,但是又需要将这两个类结合进行工作。那么就需要一个适配类,也就是Adapter类来完成桥梁的作用。
可以看到,适配器模式的意图就是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。下面我将以一个usb和ps/2的转接器的例子来说明适配器模式。
适配器模式需要三个部分组成,一个是目标接口,也就是客户需要的接口,另一个是原接口,也就是待适配的接口或者类,还有一个就是将这两个接口进行适配的适配器类。
首先来看目标接口
public interface Target {
void handleReq();
}
这个是Target指需要将ps/2接口变为usb接口进行输出。也就是我们的目的。
public class Adaptee {
public void request(){
System.out.println("可以完成客户请求的需要的功能!");
}
}
这个Adaptee是指最后可以输出的usb接口,也就是可以和电脑直接连接的部分。那么就需要一个适配器将这两部分进行连接。
连接的方式有两种
public class Adapter extends Adaptee implements Target {
@Override
public void handleReq() {
super.request();
}
}
第一种是通过集成Adptee类并进行方法调用的方式,但是如果需要适配多个类的时候,由于java的单继承属性,就会出现错误。
public class Adapter2 implements Target {
private Adaptee adaptee;
@Override
public void handleReq() {
adaptee.request();
}
public Adapter2(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
}
所以第二种通过注入的方式就更为合适了。以下是测试代码
public class Client {
public void test1(Target t){
t.handleReq();
}
public static void main(String[] args) {
Client c = new Client();
Adaptee a = new Adaptee();
Target t = new Adapter();
Target t = new Adapter2(a);
c.test1(t);
}
}