标签:java设计模式
Adapter Pattern的作用是在不改变功能的前提下转换接口。Adapter分为两类,一类是Object Adapter, 另一类是Class Adapter。由于Class Adapter的实现需要用到多继承,而Java不支持多继承,所以这里只关注Object Adapter。
在JDK1.5之前是没有 java.util.Iterator 接口的,java.util.Enumeration 接口起着 Iterator 的作用。那么如果我们需要维护一些年代比较久远的代码,可能就会面临着没有 Iterator 的窘境。这时候 Adapter Pattern 就派上用场了。下面通过两个例子,说明如何通过 Adapter Pattern 将 Enumeration 接口与 Iterator 接口相互“转换”。
class IteratorAdapter implements Iterator {
private Enumeration enume; // 保存 Enumeration 接口实现类
public IteratorAdapter(Enumeration enume) {
this.enume = enume;
}
/**
* Enumeartion的hasMoreElements()方法与Iterator的hasNext()方法功能相同,直接调用
*/
@Override
public boolean hasNext() {
return enume.hasMoreElements();
}
/**
* Enumeration的next()方法与Iterator的next()方法功能相同,直接调用
*/
@Override
public Object next() {
return enume.nextElement();
}
/**
* 由于Enumeration接口中没有此方法,所以扔异常
*/
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
StringTokenizer st = new StringTokenizer("a b c d e f g");
// 创建adapter对象,将StringTokenizer对象传进去
IteratorAdapter strTokenAdapter = new IteratorAdapter(st);
// 这时候就可以用Iterator的方式遍历没有实现Iterator接口的对象了
while(strTokenAdapter.hasNext()) {
out.println(strTokenAdapter.next());
}class EnumerationAdapter implements Enumeration {
private Iterator it;
public EnumerationAdapter(Iterator it) {
this.it = it;
}
@Override
public boolean hasMoreElements() {
return it.hasNext();
}
@Override
public Object nextElement() {
return it.next();
}
}Java设计模式之适配器模式(Adapter Pattern),布布扣,bubuko.com
Java设计模式之适配器模式(Adapter Pattern)
标签:java设计模式
原文地址:http://blog.csdn.net/neosmith/article/details/31639099