dotSITE
Шаблоны проектирования Work in Murano Software. Вопросы/Ответы
новости материалы решения форумы группы настройки/о проекте

Iterator

Iterator используется, когда нужно перебрать все элементы некоторого набора. Он реализует операцию перехода к следующему элементу и перехода к первому. При этом скрывается истинная структура размещения элементов набора.

        namespace Iterator_DesignPattern
        {
            using System;
            using System.Collections;

            class Node 
            {
                private string name;
                public string Name 
                {
                    get 
                    {
                        return name;    
                    }
                }
                public Node(string s)
                {
                    name = s;
                }
            }
            
            class NodeCollection 
            {
                private ArrayList list = new ArrayList();
                private int nodeMax = 0;
                
                // Упражнение: добавьте метода для удаления
                // и редактирования элементов.

                public void AddNode(Node n)
                {
                    list.Add(n); 
                    nodeMax++;          
                }       
                public Node GetNode(int i)
                {
                    return ((Node) list[i]);
                }

                public int NodeMax 
                {           
                    get 
                    {
                        return nodeMax;
                    }
                }
            }

            /*
             * Логика перебора элементов кладется на 
             * итератор.
             */
            abstract class Iterator 
            {
                abstract public Node Next();        
            }

            class ReverseIterator : Iterator
            {
                private NodeCollection nodeCollection;
                private int currentIndex;

                public ReverseIterator (NodeCollection c)
                {
                    nodeCollection = c;         
                    currentIndex = c.NodeMax -1; // array index starts at 0!
                }

                override public Node Next()
                {
                    if (currentIndex == -1)
                        return null;
                    else 
                        return(nodeCollection.GetNode(currentIndex--));
                }
            }
            
            public class Client
            {
                public static int Main(string[] args)
                {   
                    NodeCollection c = new NodeCollection();
                    c.AddNode(new Node("first"));
                    c.AddNode(new Node("second"));
                    c.AddNode(new Node("third"));

                    ReverseIterator i = new ReverseIterator(c);

                    Node n;
                    do 
                    {
                        n = i.Next();
                        if (n != null) 
                            Console.WriteLine("{0}", n.Name);
                    } while (n != null);
                        
                    return 0;
                }
            }
        }
        

Back
Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2010 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development