定义:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
用自己的话说:封装了列表对象,不把底层的东西暴露给用户,注意:每次获取迭代器的时候,都会取到一个新的迭代器,所以记得不能直接取着用。
代码:
首先,我们定义一个迭代器接口:
public interface OfferIterator {
Iterator<String> iterator();
}
然后定义使用迭代器的类:
public class MyMenu implements OfferIterator {
String[] menu = new String[20];
/**
*
*/
public MyMenu() {
//
for(int i = 0 ; i < 20 ; i ++){
menu[i]=String.valueOf(i);//在构造的时候就给一些默认值
}
}
private class MyIterator implements Iterator<String>{
String[] s;
int position=0;
/**
*
*/
public MyIterator(String[] s) {
//
this.s=s;
}
/* (非 Javadoc)
* @see java.util.Iterator#hasNext()
*/
@Override
public boolean hasNext() {
//
if(position>(s.length-1)){
return false;
}else{
return true;
}
}
/* (非 Javadoc)
* @see java.util.Iterator#next()
*/
@Override
public String next() {
//
String string = s[this.position];
position++;
return string;
}
/* (非 Javadoc)
* @see java.util.Iterator#remove()
*/
@Override
public void remove() {
//
System.out.println("无法删除");
}
}
/* (非 Javadoc)
* @see com.jjt.iterator.OfferIterator#iterator()
*/
@Override
public Iterator<String> iterator() {
//
return new MyIterator(menu);//这里每次返回都是一个新的对象
}
}
测试:
public static void main(String[] args){
MyMenu myMenu = new MyMenu();
Iterator<String> i = myMenu.iterator();
for(;i.hasNext();){
System.out.println(i.next());
}
}
结果:
0
1
2
3
4
5
.
.
.
.