迭代器模式

想法:

看完售票员这个迭代高手,突然想起了自己高中之前当课代表的无聊日子了!每天面对教室中那些黑压压的人群,就有点透不过气来!更何况天天还得催着他们交作业!更是透顶的无聊啊!最可恨的还是每次总是有那么几个人忘记或者就是故意不交作业,让自己着实费一番苦工把他们搜索出来!

定义:

迭代式模式,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。就如自己这个课代表职位,不管是学习好的,还是和自己关系好的,到这个时候都得交作业,因为得上交老师人名单来查询作业情况。查作业的过程当然就是一个很好的迭代模式了!原来自己也曾经是一个迭代高手啊@!
   迭代器模式,又叫做游标模式,属于行为模式的一种

介绍:

当你需要访问一个聚集对象,而不管这些对象是什么都需要遍历的时候,你就应该考虑使用该模式;对于不想交作业的同学,我可以通过浏览一遍作业从左到右查看,也可以从右到做查看,也就是当需要对聚集有多种方式遍历时,可以考虑;不管是什么作业,都要遵循这个方式,为遍历不同的聚集结构提供如开始,下一个,是否结束,当前哪一项等统一接口。

升级:

1)Foreach in语句:为数组或对象集合中的每个元素重复一个嵌入语句组。其实就是VB中的for each in语句,只是写法不一样罢了!
foreach in 语句为数组或对象集合中的每个元素重复一个嵌入语句组。
 2).NET的迭代器,已经准备好的接口IEumerator
IEumerator支持对非泛型集合的简单迭代接口
 public interface IEumerator
        {
            object Current         //获取集合中的当前元素
            {
                get;
            }
            //将枚举数推进到集合的下一个元素。方法返回值True表示迭代器成功
            //前进到集合中的下一个元素,返回值false表示已经位于集合中的末尾
            bool MoveNext();   
            void Reset();   //恢复初始化指向的位置,该位置位于集合中第一个元素之前
        }
IEnumerable公开枚举数,该枚举数支持在非泛型集合上进行简单迭代
public interface IEumerable
        {
            IEumerator GetEnumerator();   //返回一个循环访问集合的枚举数
        }
对于客户端代码的优化:
static void main (string [] args)
        {
            IList<string> a = new List<string>();       //也可以是ArrayList集合
            a.Add("霍霍");
            a.Add("盟盟");
            a.Add("行李");
            a.Add("老外");
            a.Add("公交内部员工");
            a.Add("小偷");

            foreach (string item in a )   //使用Foreach语句,优化了代码
            {
                Console.WriteLine("{0}请买票!", item);
            }
            Console.Read();
        }
foreach in就是实现这两个接口来实现循环遍历。尽管我们不需要显示的引用迭代器,但系统本身还是通过迭代器来实现遍历的。总地来说,迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。

总结:

优点:它支持以不同的方式遍历一个聚集对象;迭代器简化了聚合类;在同一个聚合上可以有多个遍历;在迭代器模式中,增加新的聚合类和迭代器类都很方便,无需修改原有代码。

缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值