⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iteratorstructural.cs

📁 使用C#程序将23个常用设计模式进行列表显示
💻 CS
字号:
using System;
using System.Windows.Forms;
using System.Collections;

namespace DesignPattern.IteratorStructural
{
    class IteratorStructural : AbstractPattern
    {
        public static void Run(TextBox tbInfo)
        {
            s_tbInfo = tbInfo;
            s_tbInfo.Text = "";

            ConcreteAggregate a = new ConcreteAggregate(); 
            a[0] = "Item A"; 
            a[1] = "Item B"; 
            a[2] = "Item C"; 
            a[3] = "Item D"; 

            // Create Iterator and provide aggregate
            ConcreteIterator i = new ConcreteIterator(a); 
            DesignPattern.FormMain.OutputInfo("Iterating over collection:"); 
            object item = i.First(); 
            while (item != null) 
            {
                DesignPattern.FormMain.OutputInfo(item.ToString()); 
                item = i.Next(); 
            }

            // Wait for user 
            //Console.Read();
        }
    }
    
    // "Aggregate" 
    abstract class Aggregate 
    {
        public abstract Iterator CreateIterator();
    }
    
    // "ConcreteAggregate" 
    class ConcreteAggregate : Aggregate
    {
        private ArrayList items = new ArrayList();
        public override Iterator CreateIterator() 
        {
            return new ConcreteIterator(this); 
        }
        
        // Property 
        public int Count 
        {
            get
            {
                return items.Count; 
            } 
        }
        
        // Indexer 
        public object this[int index] 
        {
            get
            {
                return items[index]; 
            }
            set 
            {
                items.Insert(index, value); 
            }
        }
    }
    
    // "Iterator" 
    abstract class Iterator 
    {
        public abstract object First(); 
        public abstract object Next(); 
        public abstract bool IsDone(); 
        public abstract object CurrentItem(); 
    }
    
    // "ConcreteIterator" 
    class ConcreteIterator : Iterator 
    {
        private ConcreteAggregate aggregate; 
        private int current = 0; 
        
        // Constructor 
        public ConcreteIterator(ConcreteAggregate aggregate) 
        {
            this.aggregate = aggregate; 
        }
        public override object First() 
        {
            current = 0;
            return aggregate[0]; 
        }
        public override object Next() 
        {
            object ret = null; 
            if (current < aggregate.Count - 1)
            {
                ret = aggregate[++current]; 
            } 
            return ret; 
        }
        public override object CurrentItem()
        { 
            return aggregate[current]; 
        }
        public override bool IsDone() 
        {
            return current >= aggregate.Count ? true : false;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -