迭代器模式定义:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
当需要为遍历不同的聚合结构提供一个统一的接口时,可以使用迭代器模式。
以下代码演示迭代器模式简单的实际运用:定义一个抽象迭代器接口Iterator:
package com.ldl.cn.IteratorModel;
public interface Iterator {
boolean hasNext();
Object next();
}
定义一个聚合接口GetIterator:
package com.ldl.cn.IteratorModel;
public interface GetIterator {
public void add(Object object);
public void remove(Object object);
public Iterator getIterator();
}
定义具体聚合BooksRepository实现GetIterator:
package com.ldl.cn.IteratorModel;
import java.util.ArrayList;
import java.util.List;
public class BooksRepository implements GetIterator{
private List<Object> bookList = new ArrayList<>();
@Override
public void add(Object object) {
bookList.add(object);
}
@Override
public void remove(Object object) {
bookList.remove(object);
}
@Override
public Iterator getIterator() {
return new BooksIterator(bookList);
}
}
定义一个具体迭代器BooksIterator实现Iterator:
package com.ldl.cn.IteratorModel;
import java.util.List;
public class BooksIterator implements Iterator{
private List<Object> bookList = null;
private int index = -1;
public BooksIterator(List<Object> bookList) {
super();
this.bookList = bookList;
}
@Override
public boolean hasNext() {
if (index < bookList.size() - 1) {
return true;
}else{
return false;
}
}
@Override
public Object next() {
Object obj=null;
if(this.hasNext())
{
obj=bookList.get(++index);
}
return obj;
}
}
编写测试类:
package com.ldl.cn.IteratorModel;
public class TestIteratorPattern {
public static void main(String[] args) {
GetIterator iterator = new BooksRepository();
iterator.add("Java");
iterator.add("Python");
iterator.add("C");
Iterator iter = iterator.getIterator();
while(iter.hasNext()){
Object ob=iter.next();
System.out.println(ob.toString());
}
}
}
运行结果:
Java
Python
C