解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手

一、你在开发中使用过迭代吗?
     当你在使用JavaScript开发客户端应用的时候使用过for...in吗?
 1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 < script type = " text/javascript " >
 2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 var  obj;
 3 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手useForIn  =   function  ()
 4 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 {
 5解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手   obj = (0,1,2,3,4,5,6,7,8,9);
 6解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手   for(var o in obj)
 7解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手   {
 8解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手      document.write(o);
 9解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手   }

10解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

11 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 < / script>

     当你在.NET Frameworks上使用C#,VB.NET,J#等语言开发应用的时候使用过foreach....in吗?
 1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 class  Program
 2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 {
 3解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    static void Main(string[] args)
 4解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    {
 5解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        List<int> list = new List<int>();
 6解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        //--------初始化集合-----------
 7解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        for (int i = 0; i < 10; i++)
 8解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
 9解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            list.Add(i);
10解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

11解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        //-------遍历集合--------------
12解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        foreach (int i in list)
13解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
14解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            Console.WriteLine(i);
15解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

16解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    }

17解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

     如果你是一位Java发烧者,你在遍历集合的时候是使用什么方式呢?是 Iterator?还是for?
 1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 import  java.util. * ;
 2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 public   class  UseForIn  {
 3解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    public static void main(String[] args) {
 4解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        List<String> list = new ArrayList<String>();
 5解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        for (int i = 0; i < 10; i++{
 6解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            list.add("String:" + i);
 7解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

 8解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        //--------------使用Iterator遍历集合---------------
 9解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        Iterator it = list.iterator();
10解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        while(it.hasNext()){
11解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            System.out.println(it.next());
12解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

13解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        //------使用for解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手.in(JDK 1.5以更高版本才能支持)-----
14解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        
15解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        for (String s : list ){
16解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            System.out.println(s);
17解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

18解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    }

19解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

二、解说迭代模式
     我们先来看看迭代器模式的UML图(下图来至 http://www.dofactory.com/)
         解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
   
迭代器模式(Iterator)
迭代器模式(Iterator),提供一种方法顺序访问一个集合对象中的各个元素,而不暴露该对象的内部表示。


    可以说,.NET Frameworks中的每一个集合对象,都应用了Iterator模式。一个聚集对象,而且不管这些对象是什么时候都需要遍历的时候,我们都应该使用迭代器模式。另外在我们需要为集合对象提供多种遍历方式的时候也可以考虑用迭代器模式。

    本来这个模式还是很有意思的,不过现今来看迭代器模式实用价格远不如学习价值大了。因为现在的高级编程语言如C#,Java等本身已经把这个模式做在语言中了。回到本文开始,我想你就能够明白我为什么在文章的开始部分就发起提问?就拿C#的foreach....in语言来说吧,他就是一个可以遍历所有的集合对象的工具,而且非常好用。

    另外还有像IEnumerable接口也是为迭代器模式而准备的,不管如何,学习一下GOF的迭代器模式的基本结构,还是很有学习价值的。研究历史是为了更好地迎接未来。

三、悟透foreach....in语句
     为了使用户更方便的遍历集合对象的所有元素,C#提供了foreach...in语句,该语句的实现正是通过IEnumerable的MoveNext()来完成遍历的。
     为了验证foreach....in语句与迭代器的关系,我们来定义一个实现逆序遍历集合的类ReverseList类,定义很简单,只需要继承ArrayList类,并重写GetEnumerator方法既可。
 1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 namespace  DesignPattern.Iterator
 2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 {
 3解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    public class ReverseList:ArrayList
 4解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    {
 5解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public override IEnumerator GetEnumerator()
 6解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
 7解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            return new ReverseListEnumerator(this);
 8解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

 9解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    }

10解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

    其中,类ReverseListEnumerator实现了IEnumerator,它提供了逆序遍历的迭代器。定义如下:
 1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System;
 2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System.Collections.Generic;
 3 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System.Text;
 4 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System.Collections;
 5 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
 6 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 namespace  DesignPattern.Iterator
 7 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 {
 8解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    public class ReverseListEnumerator:IEnumerator
 9解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    {
10解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public ReverseListEnumerator(ArrayList list)
11解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
12解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.list = list;
13解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.index = list.Count;
14解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.CurrentElement = list;
15解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

16解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
17解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        private object CurrentElement;
18解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        private int index;
19解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        private ArrayList list;
20解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
21解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public object Current
22解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
23解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            get 
24解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            {
25解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                object obj = this.CurrentElement;
26解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                if (obj != this.list)
27解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                {
28解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                    return obj;
29解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                }

30解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                if (this.index == -1)
31解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                {
32解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                    throw new Exception("索引超出下标范围!");
33解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                }

34解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            }

35解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

36解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
37解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public bool MoveNext()
38解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
39解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            if (this.index > 0)
40解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            {
41解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                this.index--;
42解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                this.CurrentElement = this.list[this.index];
43解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                return true;
44解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            }

45解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.CurrentElement = this.list;
46解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.index = 0;
47解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            return false;
48解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

49解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
50解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public void Reset()
51解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
52解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.CurrentElement = this.list;
53解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.index = this.list.Count;
54解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

55解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    }

56解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

57 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手

     我们来比较下使用ArrayList和自定义的ReverseList类通过foreach....in遍历后的结果:
 1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System;
 2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System.Collections.Generic;
 3 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System.Text;
 4 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
 5 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 namespace  DesignPattern.Iterator
 6 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 {
 7解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    class Program
 8解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    {
 9解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        static void Main(string[] args)
10解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
11解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            List<int> list = new List<int>();
12解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            ReverseList rlist = new ReverseList();
13解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            //--------初始化数据-----------------------
14解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            for (int i = 0; i < 10; i++)
15解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            {
16解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                list.Add(i);
17解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                rlist.Add(i);
18解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            }

19解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            //-----使用C#的foreach解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手.in语句(顺序遍历类ArrayList)-------
20解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            foreach (int i in list)
21解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            {
22解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                Console.Write(i + " ");
23解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            }

24解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            Console.WriteLine();  //起换行作用
25解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
26解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            //--------使用自定义的逆序遍历类(ReverseList)--------------
27解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            foreach (int i in rlist)
28解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            {
29解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                Console.Write(i + " ");
30解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            }

31解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            Console.WriteLine();  //起换行作用
32解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

33解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    }

34解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

    运行结果如下:
解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手

四、现实生活中的迭代高手
     我想对于大多数(有一部分人自己有车,有部分人骑自行车或摩托车,有部分人步行)的人来说,每天都有这样的经历,早晨起床后一阵忙碌,忙完了就是准备上班了。来到了公交车站,XX分钟过去后,到上班点的公交来了,这时该做什么?上贝,不上你就等着上班迟到吧,哈哈。
     仔细观察售票员就会发现,每到一个站点,公交车都会停下上客或是下客,人多混杂(有的是买过票的,有的还没买过),我真佩服售票员的记忆,乘客随时都在上下,他总是能记住上了那些人,其中那些又是没有买票的。他可以从车头卖票到车尾,也可以从车尾到车头,也可以就在车门那站着售票,呵呵,这好象也迭代器有很大的联系。看看下面代码:
1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 public   class  公交车:ArrayList
2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 {
3解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    
4解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

     直接继承ArrayList,什么也不做,这时[公交车]也就拥有了ArrayList的公开属性和方法。下面是[乘客类];
 1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System;
 2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System.Collections.Generic;
 3 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 using  System.Text;
 4 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
 5 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 namespace  DesignPattern.Iterator
 6 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 {
 7解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    public class 乘客
 8解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    {
 9解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public 乘客() { }
10解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public 乘客(string name, bool flag)
11解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
12解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.name = name;
13解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            this.flag = flag;
14解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

15解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
16解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        private string name;
17解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public string Name
18解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
19解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            get return name; }
20解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            set { name = value; }
21解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

22解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
23解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        private bool flag;
24解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        public bool Flag
25解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
26解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            get return flag; }
27解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            set { flag = value; }
28解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

29解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    }

30解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

    乘客名字和标识(是否买过票),看看下面的示例;
 1 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 namespace  DesignPattern.Iterator
 2 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手 {
 3解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    class Program
 4解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    {
 5解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        static void Main(string[] args)
 6解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        {
 7解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            公交车 gjc = new 公交车();
 8解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            乘客 ck = null;
 9解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            //乘客上车
10解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            for (int i = 0; i < 5; i++)
11解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            {
12解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                ck = new 乘客(i + 1 + "号乘客"false);
13解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                gjc.Add(ck);
14解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            }

15解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            //迭代高手出场--收车费--全部收完
16解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            for (int i = 0; i < gjc.Count; i++)
17解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            {
18解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                乘客 c = (乘客)gjc[i];
19解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                c.Flag = true;
20解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            }

21解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            //到了一站--张三和李四上了车
22解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            //售票员还没来收张三的钱呢,不会是在考验张三是不是自觉掏钱买票吧
23解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            gjc.Add(new 乘客("张三"false));
24解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            gjc.Add(new 乘客("李四"true)); //这人老实,一上车就自动购票
25解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
26解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            foreach (乘客 k in gjc)
27解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            {
28解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                if (k.Flag)
29解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                {
30解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                    Console.WriteLine("到终点站了,{0}请下车!", k.Name);
31解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                }

32解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                if (!k.Flag)
33解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                {
34解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                    Console.WriteLine("你好{0}同志,你还没有买票,要走可以,请先买票!", k.Name);
35解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手                }

36解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手            }

37解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手        }

38解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手    }

39解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手}

     上面的代码很简单,我就不做详细解说,运行结果如下图:
       解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手

五、总结迭代高手
      从上面的几个示例中就可以看出,尽管我们没有显示的引用迭代器,但实质还是通过迭代器来遍历的。总地来说, 迭代器模式就是分离了集合对象的迭代行为,抽象出一个迭代器类来负责,这样既可做到不暴露集合的内部结构,又可以让外部代码可以透明的访问集合内部的元素。
     
迭代器模式在访问数组、集合、列表等数据时,尤其是数据库数据操作时,是非常普遍的应用,但由于它太普遍了,所以各种高级语言都对他进行了封装,所以反而给人感觉此模式本身不太常用了。

     看来现实生活中的售票员就是一位了不起的迭代高手,每次乘客上下车他都会数数进行统计,然后根据他自己的迭代方式去遍历车内的乘客进行售票,不会放过任何逃票之客。

     任何行业都有技巧和经验,需要多思考、多琢磨,才能做到最好的。
     编程又何尝不是这样,没有最好,只有更好,我们都需要努力。

注:上面总结源于《大话设计模式》
转载请注明出处: http://beniao.cnblogs.com  或  http://www.cnblogs.com
-----------------------------------------------------------------------------------------------------------

你可能感兴趣的:(iterator)