适配器模式(Adapter Pattern
)归属于结构型设计模式的一种,其设计思想是:将一个类的接口适配成客户所期待的,其实现方式是将一个类的接口包裹在一个已存在的类中,使得原本由于结构不兼容而不能在一起工作的类一起工作。
适配器类型
适配器模式主要可以如下三个类型:
- 类适配器:对应适配器继承适配者
- 对象适配器:在适配器的构造器中添加适配者的参数,在使用适配器时传入适配者,就能够做到灵活使用。
由于java
并不支持多继承,已次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口,可通过接口配合类的方式实现多继承。所以我们通常都是使用对象适配模式实现适配器模式。
实现
适配器模式实现之前,我们先来了解下实现一个适配器模式,需要创建哪些角色 。一般的,适配中的角色主要有如下四类:
Target
:定义客户端所需的接口。Adapter
:适配器类,实现了Target
接口,并且包含一个Adaptee
类型的对象。Adaptee
:定义了一个已有的接口,这个接口需要适配。Client
:使用Target
接口的对象。
根据上述四个角色,我们来了解下适配器实现的具体代码:
//Target:网线
public class Reticle {
public void request(){
System.out.println("插上网线上网");
}
}
//Adaptee:适配器接口
public interface NetToUSB {
//作用:处理请求 将网线=>USB
void handleRequest();
}
// Client:使用者
public class Computer {
//进行上网
public void net(NetToUSB adapter){
//调用适配器的方法
adapter.handleRequest();
}
}
//Adapter:类适配器实现
public class Adapter extends Reticle implements NetToUSB{
@Override
public void handleRequest() {
super.request();
}
}
//Adapter:对象适配器实现
public class Adapter2 implements NetToUSB{
private Reticle reticle;
//传入指定的适配者
public Adapter2(Reticle reticle){
this.reticle = reticle;
}
@Override
public void handleRequest() {
reticle.request();
}
}
//②测试组合方式的适配器
@Test
public void test01(){
Computer computer = new Computer();//电脑
Reticle reticle = new Reticle();//网线
//将网线传入到适配器中(组合方式)
NetToUSB adapter = new Adapter2(reticle);
computer.net(adapter);
}