public abstract class Iterator {
public abstract Object first ( ) ;
public abstract Object next ( ) ;
public abstract boolean isDone ( ) ;
public abstract Object currentItem ( ) ;
}
public class ConcreteIterator extends Iterator {
private ConcreteAggregate aggregate;
private int current = 0 ;
public ConcreteIterator ( ConcreteAggregate aggregate) {
this . aggregate = aggregate;
}
@Override
public Object first ( ) {
return aggregate. get ( 0 ) ;
}
@Override
public Object next ( ) {
Object result = null;
current++ ;
if ( current< aggregate. count ( ) ) {
result = aggregate. get ( current) ;
}
return result;
}
@Override
public boolean isDone ( ) {
return ( current+ 1 ) > aggregate. count ( ) ? true : false ;
}
@Override
public Object currentItem ( ) {
return aggregate. get ( current) ;
}
}
public abstract class Aggregate {
public abstract Iterator createIterator ( ) ;
}
public class ConcreteAggregate extends Aggregate {
private List< Object> items = new ArrayList < Object> ( 16 ) ;
@Override
public Iterator createIterator ( ) {
return new ConcreteIterator ( this ) ;
}
public int count ( ) {
return items. size ( ) ;
}
public Object get ( int index) {
return items. get ( index) ;
}
public void set ( int index, Object value) {
items. add ( index, value) ;
}
}
public class DemoEnter {
public static void main ( String[ ] args) {
ConcreteAggregate a = new ConcreteAggregate ( ) ;
a. set ( 0 , "张三" ) ;
a. set ( 1 , "李四" ) ;
a. set ( 2 , "王五" ) ;
a. set ( 3 , "马六" ) ;
a. set ( 4 , "麻七" ) ;
a. set ( 5 , "赵八" ) ;
Iterator i = new ConcreteIterator ( a) ;
while ( ! i. isDone ( ) ) {
System. out. println ( i. currentItem ( ) + " ,请 xxx" ) ;
i. next ( ) ;
}
}
}