迭代器模式就是顺序访问一个聚集对象中的各个元素,而不暴露该对象的内部表示。该模式的关键思想是将对列表的访问和遍历从列表对象中分离出来,并放入一个迭代器对象中。这句话包含两层意思:一是需要遍历的对象即聚集对象;二是迭代器对象用于对聚集对象进行遍历访问,如图10-7所示。迭代器类定义了一个访问该列表元素的接口。迭代器对象负责跟踪当前的元素。一般来说,迭代器模式在集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。
图10-7 迭代器模式示例
MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且有Collection实例。
首先,定义两个接口:
public interface Collection{
public Iterator iterator();
/*取得集合元素*/
public Object get(int i);
/*取得集合大小*/
public int size();
}
public interface Iterator{
//前移
public Object previous();
//后移
public Object next();
public boolean hasNext();
//取得第一个元素
public Object first();
}
其次,定义两个实现类:
public class MyCollection implements Collection{
public String string[]={"A","B","C","D","E"};
@Override
public Iterator iterator(){
return new MyIterator(this);
}
@Override
public Object get(int i){
return string[i];
}
@Override
public int size(){
return string.length;
}
}
public class MyIterator implements Iterator{
private Collection collection;
private int pos=-1;
public MyIterator(Collection collection){
this.collection=collection;
}
@Override
public Object previous(){
if(pos>0){
pos--;
}
return collection.get(pos);
}
@Override
public Object next(){
if(pos<collection.size()-1){(www.xing528.com)
pos++;
}
return collection.get(pos);
}
@Override
public boolean hasNext(){
if(pos<collection.size()-1){
return true;
}else{
return false;
}
}
@Override
public Object first(){
pos=0;
return collection.get(pos);
}
}
@Override
public boolean hasNext(){
if(pos<collection.size()-1){
return true;
}else{
return false;
}
}
@Override
public Object first(){
pos=0;
return collection.get(pos);
}
} public class Test{
public static void main(String[]args){
Collection collection=new MyCollection();
Iterator it=collection.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
测试:
public class Test{
public static void main(String[]args){
Collection collection=new MyCollection();
Iterator it=collection.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
输出:
A B C D E
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。