适配器是一个接口转换器,顾名思义,当我们得到的接口或者类与要求不匹配时,利用适配器对其进行转换,从而达到我们的要求。
适配器模式一般包含三个角色:
1:Target(目标抽象类):是我们需要用的接口或者类样式。
2:Adapter(适配器类):将已有接口或类转换为我们需要的样式。
3:Adaptee(适配者类):已有的接口或者类,待转换。
适配器模式主要有三种:
1、类适配器
2、对象适配器
3、缺省适配器
一、类适配器
//需要用到method2方法
public interface Target {
public void method1();
public void method2();
}
//然而已有类中没有method2方法
public class Adaptee {
public void method1(){}
}
//所以要使用(继承)适配器并设置目标(实现目标接口)
public class Adapter extends Adaptee implements Target {
@Override
public void method2() {
//巴拉巴拉
}
}
二、对象适配器
//需要用到method1、2两个方法
public interface Target {
public void method1();
public void method2();
}
//可是原类中只有一个该怎么办呢
public class Adaptee {
public void method1(){}
}
public class Adapter {
//只好在新类中定义原类的私有变量
private Adaptee adaptee;
public Adapter(Adaptee adaptee){
this.adaptee = adaptee;
}
public void method1(){
this.adaptee.method1();
}
//并实现原类中没有的方法
public void method2(){
//巴拉巴拉
}
}
三、缺省适配器
//这个接口有太多方法
public interface Adaptee {
void a();
void b();
void c();
void d();
void e();
void f();
}
//只好新建一个抽象类来实现它
public abstract class Adapter implements Adaptee {
public void a(){}
public void b(){}
public void c(){}
public void d(){}
public void e(){}
public void f(){}
}
//继承抽象类就可以实现间接实现接口而不用实现其所有方法了
public class Target extends Adapter {
public void a(){}
public void d(){}
}