迭代器模式提供一种可以遍历聚合对象的方式。java集合遍历运用的就是迭代器模式。下面自己写一个简单的迭代器。
首先是一个迭代器接口。分别有获取第一个元素,指向下一个元素,等等方法。
public interface MyIterator {
void first();
void next();
boolean hasNext();
boolean isFirst();
boolean isLast();
Object getCurrentObj();
}
接下来是具体的迭代器类。
public class MyAggregate {
private List<Object> list = new ArrayList<>();
//添加对象
public void addObject(Object obj){
this.list.add(obj);
}
//删除对象
public void removeObject(Object obj){
this.list.remove(obj);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
//构造迭代器方法
public MyIterator createIterator(){
return new Iterator();
}
//内部类实现迭代器
private class Iterator implements MyIterator{
private int cursor;
@Override
public void first() {
this.cursor = 0;
}
@Override
public void next() {
if(cursor < list.size()){
cursor++;
}
}
@Override
public boolean hasNext() {
if(cursor< list.size()){
return true;
}
return false;
}
@Override
public boolean isFirst() {
return cursor==0;
}
@Override
public boolean isLast() {
return cursor==list.size()-1;
}
@Override
public Object getCurrentObj() {
return list.get(cursor);
}
}
}
然后写一个测试类,对迭代器进行测试。
public class Test {
public static void main(String[] args) {
MyAggregate ma = new MyAggregate();
ma.addObject("aa");
ma.addObject("bb");
ma.addObject("cc");
MyIterator iterator = ma.createIterator();
while(iterator.hasNext()){
System.out.println(iterator.getCurrentObj());
iterator.next();
}
}
}
最后的结果显而易见。
aa
bb
cc