12.1.7 Java中的应用-Enumeration适配器(对象的适配器模式)
有时你可能需要将Vector转换成Iterator对象,这就需要使用包装器模式来将Enumeration对象转换成Iterator对象了。
此时我们可以选择第二种适配器-对象的适配器。如图12-7所示,包装器Enumerator负责将对象Enumeration改造成Iterator的形式。
Enumeration对象拥有如下两个函数:
hasMoreElements()判断是否有下一个对象。
nextElement()取得下一个对象。
为了将Enumeration转换为Iterator,此时可以调用上面的两个函数来分别实现Iterator的如下两个函数:
hasNext()判断是否有下一个对象。
next()取得下一个对象。
此外,Iterator接口还有一个删除函数remove,由于Enumeration没有提供相应的删除函数,这里我们可以不提供remove功能。
其完整的代码如程序12-14所示。
程序12-14 Enumeration被包装为Iterator类型Enumerator.javapackagestructure.adapter;
importjava.util.Enumeration;
importjava.util.Iterator;
publicclassEnumeratorimplementsIterator {
Enumeration em;
publicEnumerator(Enumeration em) {
super();
this.em = em;
}
publicbooleanhasNext() {
returnem.hasMoreElements();
}
publicObject next() {
returnem.nextElement();
}
publicvoidremove() {
}
}
下面来编写测试代码。首先创建一个Vector对象并初始化数据,进而得到Enumeration对象,然后根据该对象构造Enumerator的对象即可,***即可按照Iterator的接口进行迭代。其源代码如程序12-15所示。
程序12-15 测试类EnumeratorTest.javapackagestructure.adapter;
importjava.util.Enumeration;
importjava.util.Iterator;
importjava.util.Vector;
publicclassEnumeratorTest {
publicstaticvoidmain(String[] args) {
// 创建Enumeration对象
Vector vect =newVector();
vect.add("aaa");
vect.add("bbb");
vect.add("ccc");
Enumeration em = vect.elements();
// 取得Iterator对象
Iterator it =newEnumerator(em);
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
运行该程序的结果如下:aaa
bbb
ccc
【责任编辑:董书 TEL:(010)68476606】
点赞 0