适配器模式定义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法工作的两个类可以一起工作。
所以,适配器模式解决的是类型不匹配的问题。
应用:一般在项目中,一个已经定好的或者已经投产的方法中,方法参数定好了,但是目前的类却无法传入进行,那么可以将这个类适配目标类。
类图:
public interface Target {
public void sayHello();
}
public static void say(Target t){
t.sayHello();
}
现在有一个类的方法的传入参数是Target
public class Adaptee {
public void sayHello2(){
System.out.println("hello");
}
}
但是目前提供这样一个类,就要使用它。
在这种情况下,增加适配器:
public class Adapter extends Adaptee implements Target{
@Override
public void sayHello() {
super.sayHello2();
}
}
测试:
public class Client {
public static void main(String[] args) {
Target t = new Adapter();
say(t);
}
public static void say(Target t){
t.sayHello();
}
}
以上,使用的是类适配器。
加入,现在Target是一个类而不是接口了,由于java单继承机制,只能继承一个类,那么可以把Adaptee组合进Adapter中,这种方法是对象适配器。
对象适配器解决了java不能多继承而无法适配的问题。
public class Adapter2 implements Target{
private Adaptee adaptee;
public Adapter2(Adaptee adaptee){
this.adaptee=adaptee;
}
@Override
public void sayHello() {
this.adaptee.sayHello2();
}
}
这个就是对象适配器。