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

    迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

    namespace IteratorDesign
    {
        public abstract class Iterator
        {
            public abstract object First();
            public abstract object Next();
            public abstract bool IsDone();
            public abstract object CurrentItem();
        }
        public abstract class Aggregate
        {
            public abstract Iterator CreateIterator();
        }
        public 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; }
            }
            public object this[int index]
            {
                get { return items[index]; }
                set { items.Insert(index, value); }
            }
        }
        public class ConcreteIterator : Iterator
        {
            private ConcreteAggregate aggregate;
            private int current = 0;
            public ConcreteIterator(ConcreteAggregate aggregate)
            {
                this.aggregate = aggregate;
            }
            public override object CurrentItem()
            {
                return aggregate[current];
            }
    
            public override object First()
            {
                return aggregate[0];
            }
    
            public override bool IsDone()
            {
                return current >= aggregate.Count ? true : false;
            }
    
            public override object Next()
            {
                object ret = null;
                current++;
                if(current<aggregate.Count)
                {
                    ret = aggregate[current];
                }
                return ret;
            }
        }
    }
    View Code

    测试代码:

                ConcreteAggregate a = new ConcreteAggregate();
                a[0] = "A";
                a[1] = "B";
                a[2] = "C";
                Iterator i = new ConcreteIterator(a);
                object item = i.First();
                while(!i.IsDone())
                {
                    Console.WriteLine(i.CurrentItem());
                    i.Next();
                }
    View Code
  • 相关阅读:
    【ThreadX】Azure RTOS ThreadX概述
    -- spi flash 擦除接口调用HAL库不同函数的区别
    STM32 芯片锁死解决方法
    【KEIL】User's Guide
    【KEIL】Software Packs
    【KEIL 】Options for File
    使用CubeMX创建TouchGFX工程时LCD死活不显示
    【转】获取本地图片的URL
    printf 函数格式控制
    【集成】touchgfx 之 《Using C code with TouchGFX》
  • 原文地址:https://www.cnblogs.com/uptothesky/p/5282433.html
Copyright © 2011-2022 走看看