Iterator模式是行为模式之一,它把对容器中包含的内部对象的访问【委让】给外部类,使用Iterator按顺序进行遍历访问。设计模式
在程序设计中,常常有这种状况:须要从大量的数据集合中一个个地取出数据加以处理。Iterator模式就是为了有效地处理按顺序进行遍历访问的一种设计模式,简单地说,Iterator模式提供一种有效的方法,能够屏蔽汇集对象集合的容器类的实现细节,而能对容器内包含的对象元素按顺序进行有效的遍历访问。ide
Iterator模式的应用场景能够概括为知足如下几个条件:this
下面是一种比较经典的Iterator模式实现方案,该实现方案基于接口设计原则,设计了如下几个接口或类:spa
优势设计
定义一个自定义的集合的功能code
1 public interface MyList { 2 MyIterator iterator();//自定义迭代器 3 Object get(int index); 4 int getSize(); 5 void add(Object obj); 6 } 7 public class MyListImpl implements MyList { 8 private Object[] list; 9 private int index; 10 private int size; 11 public MyListImpl() { 12 index = 0; 13 size = 0; 14 list = new Object[100]; 15 } 16 @Override 17 public MyIterator iterator() { 18 return new MyIteratorImpl(this); //将自身的引用传给了迭代器 19 } 20 @Override 21 public Object get(int index) { 22 if (index > size - 1) throw new RuntimeException("超出边界了"); 23 return list[index]; 24 } 25 @Override 26 public int getSize() { 27 return this.size; 28 } 29 @Override 30 public void add(Object obj) { 31 list[index++] = obj; 32 size++; 33 } 34 }
迭代器。定义访问和遍历元素的接口对象
public interface MyIterator { Object next(); boolean hasNext(); } public class MyIteratorImpl implements MyIterator { private MyList list;//自定义集合 private int index; public MyIteratorImpl(MyList list) { index = 0; this.list = list; } @Override public Object next() { Object obj = list.get(index); index++; return obj; } @Override public boolean hasNext() { return index < list.getSize(); } }
适用性blog
访问一个聚合对象的内容而无需暴露它的内部表示
支持对聚合对象的多种遍历
为遍历不一样的聚合结构提供一个统一的接口(即支持多态迭代)接口
public class Test { public static void main(String[] args) { MyList list = new MyListImpl(); list.add("a"); list.add("b"); list.add("c"); //第一种迭代方式 for (int i = 0; i < list.getSize(); i++) { System.out.println(list.get(i)); } //第二种迭代方式 MyIterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
2016-04-21get