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

     提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。(foreach正是实现了可迭代才可用的方法)

    下方给出自定义的类,并实现可迭代的案例,体会迭代器模式。

     先给出说明:++a<0 是先加再比较 而a++<0是先比较a与0再加a  !!!!!!

     //自定义聚类
        class DieDaiList : IEnumerable
        {
            private List<object> list = new List<object>() { "n","x","j"};
            public int Length { get { return list.Count; } }
            public object GetElement(int index) { return list[index]; }
            public IEnumerator GetEnumerator()
            {
                return new DieDaiListor(this);
            }
        }
     //对应的自定义迭代器类
        class DieDaiListor : IEnumerator
        {
            private DieDaiList _diedailist;//包含自定义聚类
            private int index;//与索引(因为foreach先执行MoveNext,再执行Current,因此初始化需要设置为-1)
            public DieDaiListor(DieDaiList diedailist)
            {
                _diedailist = diedailist;
                index = -1;//先执行MoveNext,再执行Current,因此这里设置-1
            }
            public object Current
            {
                get
                {
                    return _diedailist.GetElement(index);
                }
            }
    
            public bool MoveNext()
            {
                //++a<0 是先加再比较 而a++<0是先比较a与0再加a  !!!!!!
                //先执行此,再执行Current
                if (++index< _diedailist.Length)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
    
            public void Reset()
            {
                index = -1;
            }
        }
     static void Main(string[] args)
            { 
                DieDaiList dd = new DieDaiList();
                foreach (var item in dd)
                {
                    Console.WriteLine(item);
                }
                Console.ReadKey();
            }

    迭代器的实现就是上方所书写的,套路都是一样的哦,这就是迭代器模式!

  • 相关阅读:
    mysql myisam转innodb的2种方法
    利用apache限制IP并发数和下载流量控制
    详细说明phpmyadmin连接,管理多个mysql服务器
    [LeetCode] Add Digits
    [LeetCode] Move Zeroe
    [LeetCode] Construct String from Binary Tree
    [LeetCode] Find the Difference
    [LeetCode] Invert Binary Tree
    [LeetCode] Find All Numbers Disappeared in an Array
    [LeetCode] Detect Capital
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/12194352.html
Copyright © 2011-2022 走看看