将一个类的接口,转换成客户期望的另外一个接口。
实际上适配器有2种,对象适配器和类适配器
使用组合的方式实现,不仅可以适配某个类,还可以适配该类的子类。
/**
* 鸭子
* @author huangy on 2019-05-26
*/
public interface Durk {
void quack();
void fly();
}
/**
* 火鸡
* @author huangy on 2019-05-26
*/
public interface Turkey {
/**
* 火鸡的叫声
*/
void gobble();
void fly();
}
/**
* 某个火鸡实现
* @author huangy on 2019-05-26
*/
public class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("WildTurkey gobble");
}
@Override
public void fly() {
System.out.println("WildTurkey fly");
}
}
/**
* 适配器(将火鸡转变成鸭子)
* @author huangy on 2019-05-26
*/
public class TurkeyAdapter implements Durk {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
turkey.fly();
}
}
public class DuckTest {
public static void main(String[] args) {
// 火鸡对象
WildTurkey wildTurkey = new WildTurkey();
// 把火鸡对象包装成鸭子
Durk durk = new TurkeyAdapter(wildTurkey);
durk.quack();
durk.fly();
}
}
采用继承的方式实现适配器模式。需要多重继承才能实现,java不支持多重继承。
由于使用继承的方式,适配器不用重新实现被适配者(对象适配器也不需要)。必要的时候,也可以覆盖被适配者的行为。