迭代器模式(Iterator)

简介: 1, 从 For循环说起          在几乎所有的编程语言中,都有3大结构:顺序,选择,循环。它们就像是3种框架,用来搭建不同的模型。在这3种结构中,最为独特的,要当属循环结构了。其实,我觉得叫它“懒人结构”更好。

1, 从 For循环说起


         在几乎所有的编程语言中,都有3大结构:顺序,选择,循环。它们就像是3种框架,用来搭建不同的模型。在这3种结构中,最为独特的,要当属循环结构了。其实,我觉得叫它“懒人结构”更好。

    我们自己是比较擅长处理顺序和选择的,但是如果这些东西交给计算机处理,那么我们就要为编写很多代码,告诉它出现的各种情况,应该怎样处理各种情况,这对于计算机来说,其实是件比较困难的事。但对于循环结构,计算机是比较乐意处理它的。这是间非常有意思的事,我们厌倦重复,而计算机喜欢这种重复,它处理起来无压力。so ,这时候,我们可以和计算机合作,我们处理那些非常有创造性的东西,让计算机处理那些繁琐的重复工作。“懒人结构”创造了新的合作模式。

    下面来看个非常经典的for循环求和:

static void Main(string[] args)
        {
            int i;
            int [] a=new int[100];
            int sum;

            for (i = 1; i <= 100; i++)
            {
                a[i] = i;
                sum += a[i];

            }

            Console.WriteLine(sum);

        }

    for循环起到了个框架的作用,每循环一次,它里面就变化一次,计算机对此乐此不疲,然后lazybones们就可以休息了。


   for循环虽然非常好,但是一旦我要处理的东西不再是数字,而是其他别的东西,比如,我要重复给一个流水线上的啤酒瓶贴编号标签,这时候怎么办?

    no problem,foreach循环可以帮你。foreach感觉是for循环的改进版,以前用for循环,只能利用整数进行循环遍历,而且还得自己控制上下界,一旦上下界控制不好,很可能出现越界的问题。但是foreach循环却不必担心,只要你给堆东西,我就能一个个处理掉,至于有多少,我是不管的。


  2,foreach


     例如,用foreach循环给瓶子贴标签的过程:

   

namespace foreach循环示例
{
    class GlassLabel
    {
        private int Number;
        public GlassLabel(int i)
        {
            Number = i;
        }
        
        public void PrintLabel()
        {
            Console.WriteLine("瓶子" + Number + "已经贴好了标签。");
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            IList<GlassLabel> GlassBasket = new List<GlassLabel>();

            //在瓶子篮子里面,加入100个瓶子
            for (int i = 0; i < 100; i++)
            {
                GlassBasket.Add(new GlassLabel(i));
            }
            
            //对100个瓶子贴标签
            foreach (GlassLabel glass in GlassBasket)
            {
                glass.PrintLabel();
            }
            
        }
    }
}

看一下震撼的结果(部分图,可以自己运行程序看看):


        

      要是你自己给100个瓶子贴标签,估计一会儿就又烦又累了,所以,lazybones们,还是把这些没有创意的工作交给计算机吧。

     这样处理重复工作的好方法,我们要总结下哦。这也是我们为什么要学习设计模式的原因:去除重复性的工作,不要解决任何问题都从头开始。


 3,迭代器模式


  也许是因为有了编译器为我们做好的foreach,所以我们每次都是保持“拿来主义”,但是学习下迭代器模式还是很要必要滴。

  


  上面这个图可以分成左右两部分看,左边是我们要处理的对象,通常我们处理的是这个对象的一个集合。右边是对这个对象的遍历行为,也就是我们自己写一个foreach用来处理对象。


  本模式的好处:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明地访问集合内部的数据。

 

   




 

目录
相关文章
|
7月前
Iterator与ListIterator迭代器
Iterator与ListIterator迭代器
|
6月前
|
C++ 容器
迭代器 iterator
迭代器 iterator
|
Java 索引
每日一道面试题之Iterator 和 ListIterator 有什么区别?
每日一道面试题之Iterator 和 ListIterator 有什么区别?
|
7月前
自己实现iterator迭代器
自己实现iterator迭代器
|
设计模式 Java Python
迭代器(Iterator)
迭代器(Iterator)是一种设计模式,用于遍历聚合对象的一种方法。迭代器提供了一种方法来访问聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式在 Java 和 Python 等编程语言中广泛使用,可以用于处理列表、元组、集合等数据结构。
56 1
|
7月前
|
Java
Java集合框架:什么是迭代器(Iterator)?
Java集合框架:什么是迭代器(Iterator)?
67 0
|
设计模式 存储 算法
设计模式~迭代器模式(Iterator)-20
迭代器模式(Iterator Pattern)是Java和.Net编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。迭代器模式已经被淘汰,java中已经把迭代器运用到各个聚集类(collection)中了,使用java自带的迭代器就已经满足我们的需求了 目录 迭代器模式(Iterator) (1)优点 (2)缺点 (3)使用场景 (4)注意事项 (5)应用实例: 代码
59 0
|
索引 容器
Iterator与ListIterator有什么区别
Iterator与ListIterator有什么区别
100 0
|
设计模式 Java 索引
Java设计模式-迭代器模式(Iterator)
Java设计模式-迭代器模式(Iterator)
|
存储 Java
Java集合-Iterator
Java集合-Iterator
129 2
Java集合-Iterator