迭代器模式

迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

聚合对象可以是数组,也可以是集合等。

遍历集合,我们可以使用for循环,foreach循环。遍历数组,可以使用for循环,foreach循环。

但是使用上面这两种形式,我们都需要知道聚合对象是数组,还是集合。

但是使用了迭代器之后,我们只要拿到了聚合对象的迭代器之后,就可以遍历元素了,不需要知道聚合对象是集合还是数组。

一般,集合对象可以调用iterator()方法获得自己的迭代器对象,而数组不支持iterator()方法。但是我们可以创建一个迭代器对象 。

 1 /**
 2  * Integer[]数组 迭代器类   通过构造器传入要迭代的数组对象
 3  * @author wly
 4  *
 5  */
 6 public class ArrayIterator implements Iterator<Integer> {
 7     Integer[] arr;
 8     int position = 0;
 9     public ArrayIterator(Integer[] arr)
10     {
11        this.arr = arr;    
12     }
13     @Override
14     public boolean hasNext() {
15         if(position >= arr.length || arr[position] == null)
16         {
17             return false;
18         }
19         return true;
20     }
21 
22     @Override
23     public Integer next() {
24         Integer  ele = arr[position];
25         position++;
26         return ele;
27     }
28 
29     @Override
30     public void remove() {
31         throw new UnsupportedOperationException("这个数组迭代器不支持删除元素!");    
32     }
33 
34 }

提供一个测试类:

 1 public class TestClass {
 2 
 3     public static void main(String[] args) {
 4         Integer[] a = new Integer[]{1,2,3};
 5         //将数组传入迭代器的构造器中  ,从而让迭代器拿到要迭代的数组对象
 6         Iterator iterator = new ArrayIterator(a);
 7         while(iterator.hasNext())
 8         {
 9             Integer num = (Integer)iterator.next();
10             System.out.println(num);
11             
12         }
13     }
14 }

 

posted @ 2015-01-15 17:12  wangliyue  阅读(161)  评论(0编辑  收藏  举报