适配器模式(Adapter Pattern),顾名思义,就像变压器,转接头差不多。就像美国的生活电压是110V,中国是220V,就需要一个变压器将220V转换成110V,或者一个Type-C接口想插如USB接口的东西,你就需要一个转换器,而这就是我们适配器模式干的事情。
适配器常用的有:类适配器,对象适配器,接口适配器。
通常包含三个角色:
目标(Target)角色:客=客户端所期待的接口,
源(Adaptee)角色:现有需要适配的接口。
适配器(Adapter)角色:适配器把源接口转换成目标接口。显然,这以角色不可一世接口,必须是具体的类。
一、对象适配器
我们以TypeC接口 使用转换器 能插上Usb接口为例。(TypeC->USB)
TypeC.java
public interface TypeC {
void isTypeC();
}
Usb.java
public interface Usb {
void isUsb();
}
Usber.java继承Usb类
public class Usber implements Usb {
@Override
public void isUsb() {
System.out.println("I am a USB interface!");
}
}
Adapter.java//将TypeC转为USB
public class Adapter implements TypeC{
private Usb usb;
public Adapter(Usb usb){
this.usb = usb;
}
@Override
public void isTypeC() {
usb.isUsb();
}
}
客户端调用。
public class Client {
public static void main(String[] args) {
Adapter adapter = new Adapter(new Usber());
adapter.isTypeC();
}
}
二、类适配器
TypeC.java
public interface TypeC {
void isTypeC();
}
Usb.java
public interface Usb {
void isUsb();
}
Usber.java继承Usb类
public class Usber implements Usb {
@Override
public void isUsb() {
System.out.println("I am a USB interface!");
}
}
Adapter.java//将TypeC转为USB
public class Adapter extends Usber implements TypeC{
@Override
public void isTypeC() {
isUsb();
}
}
三、接口适配器或者叫缺省适配模式
如果由一个接口里面定义了很多个方法,我们只想要使用其中的个别方法,如果直接实现接口就需要实现里面的所有方法,即使我们不需要使用的方法的返回一个null;还是会显得很多余,这个时候我们就可以使用适配器进行转换。定义一个抽象类适配器去实现接口,并把所有的方法都置空,然后我们再去继承抽象接口,重写我们需要的那几个方法就行。
Fruit.java
public interface Fruit{
void fruidA();
void fruidB();
void fruidC();
void fruidD();
}
Adapter.java
public abstract Adapter implements{
public void fruidA(){}
public void fruidB(){}
public void fruidC(){}
public void fruidD(){}
}
YellowFruit.java//实现类
public class YellowFruit extends Adapter{
@Overvide
public void fruidA(){
System.out.println("I am a banana");
}
}
在什么时候使用适配器模式
(1)系统需要使用现有的类,而此类的接口不符合系统的需要;
(2)想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包 括一些可能在将来引进的类;
(3)接口中方法太多。而我们只想使用其中个别的方法。