package iterator_pattern;
public abstract class Aggregate {
public abstract Iterator createIterator();
}
package iterator_pattern;
import java.util.ArrayList;
public class ConcreteAggregate extends Aggregate{
private ArrayList<Object> items = new ArrayList<Object>();
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
public int getCount() {
return items.size();
}
public Object getItem(int index) {//The basic method:get
return items.get(index);
}
public void setItem(int index,Object value) {//The basic method:set
items.add(index, value);
}
}
package iterator_pattern;
public abstract class Iterator {
public abstract Object first();
public abstract Object next();
public abstract boolean isDone();
public abstract Object currentItem();
}
package iterator_pattern;
public class ConcreteIterator extends Iterator{
private ConcreteAggregate aggregate;
private int current = 0;
public ConcreteIterator(ConcreteAggregate aggregate) {
this.aggregate = aggregate;
current = aggregate.getCount() - 1;//descend
}
@Override
public Object first() {
// TODO Auto-generated method stub
// return aggregate.getItem(0);
return aggregate.getItem(aggregate.getCount() - 1);
}
@Override
public Object next() {
// TODO Auto-generated method stub
Object tmp = null;
// current++;
current--;
//if(current<aggregate.getCount()) {
if(current >= 0) {
tmp = aggregate.getItem(current);
}
return tmp;
}
@Override
public boolean isDone() {
// TODO Auto-generated method stub
// return current>=aggregate.getCount() ? true:false;
return current < 0 ? true:false;
}
@Override
public Object currentItem() {
// TODO Auto-generated method stub
return aggregate.getItem(current);
}
}
package iterator_pattern;
public class Main {
public static void main(String args[]) {
ConcreteAggregate a = new ConcreteAggregate();
a.setItem(0, "apple");
a.setItem(1, "banana");
a.setItem(2, "orange");
a.setItem(3, "grape");
a.setItem(4, "pear");
a.setItem(5, "watermelon");
Iterator i = new ConcreteIterator(a);
Object item = i.first();
System.out.println(item);
while(!i.isDone()) {
System.out.println(i.currentItem());
i.next();
}
}
}
This is a general introduction to the 23 design patterns:
https://blog.youkuaiyun.com/GZHarryAnonymous/article/details/81567214
See more source code:[GZHarryAnonymous](https://github.com/GZHarryAnonymous/Design_Pattern)