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

           }

        }

  • 相关阅读:
    asp.net[web.config] httphandlers 与实现自由定义访问地址
    Web.config配置文件详解
    ASP.NET十分有用的页面间传值方法(转)
    web.config中authorization下的location中的path的设置 (转)
    基于FormsAuthentication的用户、角色身份认证(转)
    FormsAuthentication.RedirectFromLoginPage 登录
    php代码审计-下载站系统Simple Down v5.5.1 xss跨站漏洞分析
    创建二维码生成器
    更新自制入库价格(结账)
    常用的系统存储过程
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815247.html
Copyright © 2011-2022 走看看