Historical Collection Classes(JDK1.1 之前)
提供的容器有Arrays,Vector,Stack,Hashtable,Properties,BitSet。其中定義出一種走訪群集內(nèi)各元素的標(biāo)準(zhǔn)方式,稱(chēng)為Enumeration(列舉器)接口,用法如下:
Vector v=new Vector();

for (Enumeration enum =v.elements(); enum.hasMoreElements();)
{
Object o = enum.nextElement();
processObject(o);
}

而在JDK1.2版本中引入了Iterator接口,新版本的集合對(duì)象(HashSet,HashMap,WeakHeahMap,ArrayList,TreeSet,TreeMap, LinkedList)是通過(guò)Iterator接口訪問(wèn)集合元素的。
例如:
List list=new ArrayList();
for(Iterator it=list.iterator();it.hasNext();)


{
System.out.println(it.next());
}
這樣,如果將老版本的程序運(yùn)行在新的Java編譯器上就會(huì)出錯(cuò)。因?yàn)長(zhǎng)ist接口中已經(jīng)沒(méi)有elements(),而只有iterator()了。那么如何可以使老版本的程序運(yùn)行在新的Java編譯器上呢?如果不加修改,是肯定不行的,但是修改要遵循“開(kāi)-閉”原則。
這時(shí)候我想到了Java設(shè)計(jì)模式中的適配器模式。

/**//*
*@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是一個(gè)適配器類(lèi),通過(guò)它實(shí)現(xiàn)了從Iterator接口到Enumeration接口的適配,這樣我們就可以使用老版本的代碼來(lái)使用新的集合對(duì)象了。