定义:提供一种方法来访问一个对象中的聚合的各种元件,不暴露对象的内部表示。
图:
演示样例代码:
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; } @Override public Object First() { // TODO Auto-generated method stub return aggregate.get(0); } @Override public Object Next() { // TODO Auto-generated method stubg Object ret = null; current ++; if (current < aggregate.count()) { ret = aggregate.get(current); } return ret; } @Override public boolean isDone() { // TODO Auto-generated method stub return current >= aggregate.count()? true : false; } @Override public Object currentItem() { // TODO Auto-generated method stub return aggregate.get(current); } } public abstract class Aggregate { public abstract Iterator createIterator(); } public class ConcreteAggregate extends Aggregate { private List<Object> items = new ArrayList<Object>(); @Override public Iterator createIterator() { // TODO Auto-generated method stub return 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); } }client代码例如以下:
public class Client { public static void main(String[] args) { ConcreteAggregate a = new ConcreteAggregate(); a.add("123"); a.add("菜鸟"); a.add("阿里"); Iterator i = new ConcreteIterator(a); Object item = i.First(); while (!i.isDone()) { System.out.println(i.currentItem()); i.Next(); } } }
执行结果:
123
菜鸟
阿里
版权声明:本文博客原创文章。博客,未经同意,不得转载。