7.1 适配器模式
将一个类的接口(Adaptee)转换成客户期望的另一个接口(Target)。适配器让原本接口不兼容的类可以合作无间
类图
7.1.1 应用场景
适配器的本质是通过转换调用已有的实现,从而能把已有的实现匹配成需要的接口,从而复用已有的功能
如果你想要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式,来把已有的实现转换成你需要的接口
代码
WildTurkey turkey = new WildTurkey ( ) ;
Duck duck = new TurkeyAdapter ( turkey) ;
7.1.2 代码
Duck:Target
package adpter. pattern;
public interface Duck {
public void quack ( ) ;
public void fly ( ) ;
}
Turkey:Adaptee
package adpter. pattern;
public interface Turkey {
public void gobble ( ) ;
public void fly ( ) ;
}
WildTurkey:Adaptee实现类
package adpter. pattern;
public class WildTurkey implements Turkey {
@Override
public void gobble ( ) {
System. out. println ( "Gobble gobble" ) ;
}
@Override
public void fly ( ) {
System. out. println ( "Im flying a short distance" ) ;
}
}
TurkeyAdapter:Adapter
package adpter. pattern;
public class TurkeyAdapter implements Duck {
Turkey turkey ;
public TurkeyAdapter ( Turkey turkey) {
this . turkey = turkey;
}
@Override
public void quack ( ) {
turkey. gobble ( ) ;
}
@Override
public void fly ( ) {
for ( int i = 0 ; i< 5 ; i++ ) {
turkey. fly ( ) ;
}
}
}
DuckTestDriver:Client
package adpter. pattern;
public class DuckTestDriver {
public static void main ( String[ ] args) {
WildTurkey wildTurkey = new WildTurkey ( ) ;
Duck duck = new TurkeyAdapter ( wildTurkey) ;
duck. quack ( ) ;
duck. fly ( ) ;
}
}
7.1.3 编写EnumerationIterator
Enumeration为老迭代器(Adaptee),Iterator为新迭代器(Target),想制作EnumerationIterator适配器(Adapter)
EnumerationIterator
package adpter. pattern;
import java. util. Enumeration;
import java. util. Iterator;
public class EnumerationIterator implements Iterator {
Enumeration enumeration;
public EnumerationIterator ( Enumeration enumeration) {
this . enumeration = enumeration;