适配器模式是通过编写适配器完成两个不同的类之间的相互转换
有两种适配器模式:类适配器和对象适配器,这篇的案例主要是适配器类
case1
将turkey转化为duck
duck接口
public interface Duck {
public void quack();
public void fly();
}
turkey接口
public interface Turkey {
public void gobble();
public void fly();
}
Turkey接口实现
public class WildTurkey implements Turkey {
public void gobble() {
System.out.println("Gobble gobble");
}
public void fly() {
System.out.println("I'm flying a short distance");
}
}
适配器类,将Turkey转为Duck
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
public void quack() {
turkey.gobble();
}
public void fly() {
for(int i=0; i < 5; i++) {
turkey.fly();
}
}
}
本质上,将源类作为适配器的成员变量。
case 2
Enumeration类转化为Iterator
public class EnumerationIterator implements Iterator {
Enumeration enumeration;
public EnumerationIterator(Enumeration enumeration) {
this.enumeration = enumeration;
}
public boolean hasNext() {
return enumeration.hasMoreElements();
}
public Object next() {
return enumeration.nextElement();
}
public void remove() {
throw new UnsupportedOperationException();
}
}
因为没有对应的方法,所以抛出异常
对象适配器模式总结:
1.适配器类继承target接口
2.将被适配类作为属性注入适配器
3.new 这个适配器类就是获得了target类的对象
类适配器和对象适配器大同小异,没有把源对象的注入到适配器中,而是用适配器类继承源类和target类。
类适配器的优点:因为继承了源类,所以在写源类的方法的时候更方便,适用于源类有大量的方法。
缺点:因为java不支持多继承,所以,不能注入多个源类,不可以可以把多个不同的源类在一个适配器类里面进行适配
一般来说,target是接口,源类是类。这里要注意接口和类的差别。