Skip to content

迭代器(Iterator)模式 行为型模式

更新: 2023-05-24 11:11:27   字数: 0 字   时长: 0 分钟

提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

c#
// 迭代器模式示例
using System;
using System.Collections;

// 定义一个迭代器接口
public interface IIterator
{
    bool HasNext(); // 判断是否还有下一个元素
    object Next(); // 返回下一个元素
}

// 定义一个集合接口
public interface IAggregate
{
    IIterator GetIterator(); // 获取迭代器
}

// 定义一个具体的集合类
public class ConcreteAggregate : IAggregate
{
    private ArrayList items = new ArrayList(); // 使用ArrayList存储元素

    public IIterator GetIterator()
    {
        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 : IIterator
{
    private ConcreteAggregate aggregate;
    private int current = 0;

    public ConcreteIterator(ConcreteAggregate aggregate)
    {
        this.aggregate = aggregate;
    }

    public bool HasNext()
    {
        return current < aggregate.Count; // 判断是否还有下一个元素
    }

    public object Next()
    {
        object obj = null;
        if (HasNext())
        {
            obj = aggregate[current]; // 获取下一个元素
        }
        current++;
        return obj;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建一个具体的集合对象
        ConcreteAggregate aggregate = new ConcreteAggregate();
        aggregate[0] = "元素1";
        aggregate[1] = "元素2";
        aggregate[2] = "元素3";
        aggregate[3] = "元素4";

        IIterator iterator = aggregate.GetIterator(); // 获取迭代器
        while (iterator.HasNext())
        {
            Console.WriteLine(iterator.Next()); // 输出每一个元素
        }

        Console.ReadKey();
    }
}
你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度