一个小例子,便于理解,上代码~
//这是我们造的。现在想用这个方法。
public class Adaptee {
public void specialRequest(){
System.out.println("called specificrequest()in Adaptee");
}
}
//类适配器。对我们想要的方法封装一下,Target就能像之前一样,调用request方法即可。
public class Adapter1 extends Adaptee implements Target{
@Override
public void request(){
this.specialRequest();
}
}
//对象适配器
//这样就达到封装的目的。
public class Adapter2 implements Target{
Adaptee adaptee = new Adaptee();
@Override
public void request(){
adaptee.specialRequest();
}
}
public class Client {
public static void main(String[] args) {
//元素:1:Target期待调用的接口。2:Adaptee手头上有的被适配类。3:Adapter适配器
//调用这个接口的方法,实际调用到你想实现的功能。
//优点:这样就在不改动Adaptee类的情况下,进行封装,用这个适配器来达到调用新方法的目的。
//缺点:过多的适配器会冗余,因此应该先考虑重构统一的接口。
//场景:不同的开发人员、不同厂家会导致功能类似,但接口不同。还有使用第三方开发组件时。
Target t1 = new Adapter1();
t1.request();
Target t2 = new Adapter2();
t2.request();
}
}
//这里的东西是未知的,不能改的。这是之前客户端调用的东西,是旧的。
//这是原来的接口,原来的request方法。
public interface Target {
public void request();
}
输出
called specificrequest()in Adaptee
called specificrequest()in Adaptee