zoukankan      html  css  js  c++  java
  • 二十二.迭代器模式

    迭代器模式:

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

           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();

           }

        }

  • 相关阅读:
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 Cowboys
    Java实现 蓝桥杯 算法训练 Cowboys
    55. Jump Game
    54. Spiral Matrix
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815247.html
Copyright © 2011-2022 走看看