定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
代码:
package iterator_model;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author naivor
* 迭代器模式-场景类
*/
public class IteratorModel {
public static void main(String[] args) {
List<Object> list=new ArrayList<Object>();
list.add("hello");
list.add("小明");
list.add("老马");
list.add("薯条");
list.add("下雨");
list.add("电脑");
ConcreteAggregate aggregate=new ConcreteAggregate(list);
ConcreteIterator iterator=new ConcreteIterator(aggregate);
Object item=iterator.first();
while(!iterator.isDone()){
item=iterator.currentItem();
System.out.println(item.toString());
iterator.next();
}
}
}
/**
*
* @author naivor
* 迭代器模式-迭代器抽象类
*/
abstract class Iterator{
public abstract Object first();
public abstract Object next();
public abstract boolean isDone();
public abstract Object currentItem();
}
/**
*
* @author naivor
* 迭代器模式-聚集抽象类
*/
abstract class Aggregate{
public abstract Iterator createIterator();
}
/**
*
* @author naivor
* 迭代器模式-聚集具体类
*/
class ConcreteAggregate extends Aggregate{
private List<Object> items;
public ConcreteAggregate(List<Object> items) {
this.items=items;
}
@Override
public Iterator createIterator() {
// TODO Auto-generated method stub
return new ConcreteIterator(this);
}
public int getCount(){
return items.size();
}
public Object getItem(int index){
return items.get(index);
}
}
/**
*
* @author naivor
* 迭代器模式-迭代器具体类
*/
class ConcreteIterator extends Iterator{
private ConcreteAggregate aggregate;
private int current=0;
public ConcreteIterator(ConcreteAggregate aggregate) {
this.aggregate=aggregate;
}
@Override
public Object first() {
return aggregate.getItem(0);
}
@Override
public Object next() {
current++;
if (current<=aggregate.getCount()) {
return aggregate.getItem(current);
}
return null;
}
@Override
public boolean isDone() {
if (current>=aggregate.getCount()) {
return true;
}
return false;
}
@Override
public Object currentItem() {
return aggregate.getItem(current);
}
}