• 二十二.迭代器模式


    迭代器模式:

           提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

           C#/java中的foreach就是迭代器的使用。

    .net

           IEumerator支持对非泛型集合的简单迭代接口。

           如foreach(string i in Str){print i}

           就是:   

           IEnumerator<string>e=Str.GetEnumerator();

           While(e.MoveNext())

           {    

                  Printe.Current;

    }

    Demo:

           //迭代器抽象类

       abstract class Iterator

        {

           public abstract object First();

           public abstract object Next();

           public abstract bool IsDone();

           public abstract object CurrentItem();

        }

       //具体迭代器

       class ConcreteIterator : Iterator

        {

           private ConcreteAggregate aggregate;

           private int current = 0;

           public ConcreteIterator(ConcreteAggregate aggregate)

           {

               this.aggregate = aggregate;

           }

           public override object First()

           {

                return aggregate;

           }

           public override object Next()

           {

               object ret = null;

               current++;

               if (current < aggregate.Count)

               {

                    ret=aggregate[current];

               }

                return ret;

           }

           public override bool IsDone()

           {

               return current >= aggregate.Count ? true : false;

           }

           public override object CurrentItem()

           {

               return aggregate[current];

           }

    }

           //聚集抽象类

        abstract class Aggregate

        {

           public abstract Iterator CreateIterator();

        }

       //具体聚集类

       class ConcreteAggregate : Aggregate

        {

           private IList<object> items=new List<object>();

           public override Iterator CreateIterator()

           {

               return new ConcreteIterator(this);

           }

           public int Count//返回聚集总数

           {

               get { return items.Count; }

           }

           publicobject this[int index]//声明一个索引器

           {

               get { return items[index]; }

               set { items.Insert(index,value ); }

           }

    }

           class Program

        {

           static void Main(string[] args)

           {

               ConcreteAggregate a = new ConcreteAggregate();

               a[0] = "大鸟";

               a[1] = "大鸟1";

                a[2] = "大鸟2";

               a[3] = "大鸟3";

               Iterator i = new ConcreteIterator(a);

               //object ittem = i.First();

               while (!i.IsDone())

               {

                    Console.WriteLine("{0}请买票。",i.CurrentItem());

                   i.Next();

               }

               Console.ReadKey();

           }

        }

  • 相关阅读:
    python脚本netifaces模块的调用
    Remote Desktop Connection Manager介绍
    svn 分支整个项目合并主干
    C#中的 ref 传进出的到底是什么 解惑篇
    TortoiseSVN 安装中文语言包,SVN中文语言包
    CefSharp开源库的使用(一)
    cef 介绍
    SQL Server2008数据库如何改名
    通过公网连接云数据库Memcache--ECS Windows篇
    微信扫码支付模式一和模式二的区别
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815247.html
Copyright © 2020-2023  润新知