Definition: provides a method to access each element in an aggregate object sequentially without exposing the internal representation of the object.
Structure:
Sample Code:
public interface Iterator {public Object First();public Object Next();public boolean isDone();public Object currentItem();}public class ConcreteIterator implements Iterator{private ConcreteAggregate aggregate;private int current = 0;public ConcreteIterator(ConcreteAggregate aggregate) {this.aggregate = aggregate;}@Overridepublic Object First() {// TODO Auto-generated method stubreturn aggregate.get(0);}@Overridepublic Object Next() {// TODO Auto-generated method stubgObject ret = null;current ++;if (current < aggregate.count()) {ret = aggregate.get(current);}return ret;}@Overridepublic boolean isDone() {// TODO Auto-generated method stubreturn current >= aggregate.count()? true : false;}@Overridepublic Object currentItem() {// TODO Auto-generated method stubreturn aggregate.get(current);}}public abstract class Aggregate {public abstract Iterator createIterator();}public class ConcreteAggregate extends Aggregate {private List<Object> items = new ArrayList<Object>();@Overridepublic Iterator createIterator() {// TODO Auto-generated method stubreturn new ConcreteIterator(this);}public int count() {return items.size();}public Object get(int index) {return items.get(index);}public void add(Object obj) {items.add(obj);}}
The client code is as follows:
Public class client {public static void main (string [] ARGs) {concreteaggregate A = new concreteaggregate ();. add ("123");. add ("cainiao");. add ("Ali"); iterator I = new concreteiterator (a); object item = I. first (); While (! I. isdone () {system. Out. println (I. currentitem (); I. Next ();}}}
Running result:
123
Cainiao
Alibaba
Design Pattern-iterator Pattern