Historical Collection Classes(JDK1.1 之前)
提供的容器有Arrays,Vector,Stack,Hashtable,Properties,BitSet。其中定義出一種走訪群集內各元素的標准方式,稱為Enumeration(列舉器)接口,用法如下:
Vector v=new Vector();
for (Enumeration enum =v.elements(); enum.hasMoreElements();) {
Object o = enum.nextElement();
processObject(o);
}
而在JDK1.2版本中引入了Iterator接口,新版本的集合對象 (HashSet,HashMap,WeakHeahMap,ArrayList,TreeSet,TreeMap, LinkedList)是通過Iterator接口訪問集合元素的。
例如: List list=new ArrayList();
for(Iterator it=list.iterator();it.hasNext();)
{
System.out.println(it.next());
}
這樣,如果將老版本的程序運行在新的Java編譯器上就會出錯。因為List接口中已經沒有elements(),而只有iterator()了。那麼如何可以使老版本的程序運行在新的Java編譯器上呢?如果不加修改,是肯定不行的,但是修改要遵循“開-閉”原則。
這時候我想到了Java設計模式中的適配器模式。
/*
*@author 我為J狂 建立日期 2007-4-18
*
*/
package net.blogjava.lzqdiy;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
public class NewEnumeration implements Enumeration
{
Iterator it;
public NewEnumeration(Iterator it)
{
this.it=it;
// TODO Auto-generated constructor stub
}
public boolean hasMoreElements()
{
// TODO Auto-generated method stub
return it.hasNext();
}
public Object nextElement()
{
// TODO Auto-generated method stub
return it.next();
}
public static void main(String[] args)
{
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("C");
for(Enumeration e=new NewEnumeration(list.iterator());e.hasMoreElements();)
{
System.out.println(e.nextElement());
}
}
}
NewEnumeration是一個適配器類,通過它實現了從Iterator接口到Enumeration接口的適配,這樣我們就可以使用老版本的代碼來使用新的集合對象了。