首页 > 其他分享 >21_迭代器模式

21_迭代器模式

时间:2024-03-15 11:33:25浏览次数:23  
标签:遍历 21 迭代 对象 list 模式 集合 public

迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不需要暴露集合对象的内部结构。迭代器模式将遍历操作封装在迭代器对象中,使得客户端可以通过迭代器对象依次访问集合中的元素。

迭代器模式有三个主要角色:

  1. 迭代器(Iterator):定义了访问和遍历集合对象的接口,包含用于获取下一个元素、判断是否还有元素的方法等。

  2. 具体迭代器(Concrete Iterator):实现了迭代器接口,并提供了具体的遍历集合的逻辑。具体迭代器可以追踪集合中当前元素的位置。

  3. 集合(Collection):定义了创建迭代器对象的接口,通常包含一个返回迭代器的方法。

  4. 具体集合(Concrete Collection):实现了集合接口,并提供了具体的创建迭代器对象的方法。

迭代器模式的工作原理如下:

  1. 客户端通过集合对象获取迭代器对象。

  2. 客户端使用迭代器对象来访问和遍历集合中的元素。

  3. 迭代器对象通过内部状态来追踪当前访问的元素,提供了获取下一个元素的方法,并可以判断是否还有元素。

迭代器模式的优点包括:

  1. 将遍历集合的操作封装在迭代器对象中,使得客户端可以独立于集合对象进行遍历。

  2. 提供了一种统一的方式来访问集合中的元素,而不需要暴露集合的内部结构。

  3. 支持多种不同的遍历方式,客户端可以根据需要选择合适的迭代器对象。

迭代器模式适用于以下场景:

  1. 当需要遍历集合对象的元素,但不希望暴露集合对象的内部结构时,可以使用迭代器模式。

  2. 当需要支持多种不同的遍历方式,或者需要遍历不同类型的集合对象时,可以使用迭代器模式。

总结而言,迭代器模式通过封装遍历集合的操作在迭代器对象中,使得客户端可以独立于集合对象进行遍历。它提供了一种统一的方式来访问集合中的元素,而不需要暴露集合的内部结构。迭代器模式可以支持多种不同的遍历方式,并且可以适用于不同类型的集合对象。

 

Iterator

/// <summary>
    /// 迭代器接口
    /// </summary>
    public interface IIterator<T>
    {
        /// <summary>
        /// 获取对象
        /// </summary>
        /// <returns></returns>
        T Next();

        /// <summary>
        /// 判断是否有下一个对象
        /// </summary>
        /// <returns></returns>
        bool HasNext();
    }

 

 Collection

/// <summary>
    /// 集合接口
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public  interface  IAggregate<T>
    {
        /// <summary>
        /// 建造
        /// </summary>
        /// <returns></returns>
        IIterator<T> Create();
    }

 

Concrete Iterator

/// <summary>
    /// 具体迭代器
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class ConcreteIterator<T> : IIterator<T>
    {
        private readonly List<T> _list;//集合
        private int _index;//下标

        public ConcreteIterator(List<T> list)
        {
            _list = list;
        }   

        public bool HasNext()
        {
            return _index < _list.Count;
        }

        public T Next()
        {
            T result=default(T);
            if(HasNext())
            {
                result = _list[_index++];
            }
            return result;
        }
    }

 

 Concrete Collection

/// <summary>
    /// 具体集合类
    /// </summary>
    public class ConcreteAggregate<T> : IAggregate<T>
    {
        private readonly List<T> _list;

        public ConcreteAggregate()
        {
            _list = new List<T>();
        }

        public void Add(T item)
        {
            _list.Add(item);
        }

        public IIterator<T> Create()
        {
            return new ConcreteIterator<T>(_list);
        }
    }

 

 调用

public class Client
    {
        public void Start()
        {
            ConcreteAggregate<string> aggregate = new ConcreteAggregate<string>();
            aggregate.Add("AAAAAAAAAAA");
            aggregate.Add("BBBBBBBBBBB");
            aggregate.Add("CCCCCCCCCCC");
            aggregate.Add("DDDDDDDDDDD");

            //建造一个迭代器
            IIterator<string> iterator = aggregate.Create();
            while(iterator.HasNext())
            {
                Console.WriteLine("当前项:"+iterator.Next());
            }
        }
    }
static void Main(string[] args)
        {
            new Client().Start();
            Console.ReadKey();
            Console.WriteLine("Hello, World!");
        }

 

标签:遍历,21,迭代,对象,list,模式,集合,public
From: https://www.cnblogs.com/MingQiu/p/18075051

相关文章

  • 稳定可靠:PW2163降压芯片,实现5V至3.3V/3V高效转换,3A电流稳定输出
    在现代电子设备中,电源管理芯片发挥着至关重要的作用。PW2163作为一款高效稳定的500kHz同步降压DC-DC转换器,凭借其出色的性能和广泛的应用领域,已成为众多电子设备中的电源管理新选择。 一、PW2163的显著特点与优势PW2163具有内部集成低RDS(ON)的主开关和同步开关,这一设计有助于最......
  • 七、策略模式
    在深入理解Spring声明式事务时其框架涉及到该种模式的应用。策略模式的目的就是解决繁琐的ifelse判断,如下:     ......
  • redis主从+哨兵模式
    什么是哨兵模式Redis哨兵模式是一种用于确保Redis高可用性的解决方案。通过运行独立的哨兵进程,它能监控主服务器和从服务器的状态,并在主服务器故障时自动执行故障转移操作,将一个从服务器晋升为新的主服务器,从而保障系统的持续可用性。哨兵模式工作原理;监控主从服务器:在Re......
  • 单例模式与原型模式的深度探索之旅
    ​......
  • Java中实现单例(Singleton)模式的八种方式
    单例模式定义单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。基本的实现思路单例模式要求类能够有返回对象一个引用(永远是同一个)和一个获得该实......
  • python+playwright 以非無痕模式打开chrome浏览器
    在使用python+playwright想从网页下载Excel数据,因为需要经过SSO,携带Tokey才可以访问数据,所以无痕模式下搞不好,使用非无痕模式打开浏览器,就可以获取cookie,成功达到效果。点击查看代码frommultiprocessing.sharedctypesimportValuefromplaywright.sync_apiimportsync_pla......
  • 19_备忘录模式
    备忘录模式是一种行为型设计模式,它可以捕获一个对象的内部状态,并在需要时将对象恢复到之前的状态。备忘录模式通过将对象的状态封装在备忘录对象中,使得可以在不暴露对象内部实现细节的情况下进行状态的保存和还原。备忘录模式有三个主要角色:发起人(Originator):负责创建备忘录对......
  • 中考英语首字母快速突破006-2021上海嘉定英语二模-Teen Scientist Tackles Ocean Plas
    PDF格式公众号回复关键字:ZKSZM006原文​AnnaDuwaswalkingalongthebeachwhenshenoticedplasticsthere.Shereacheddowntopickthemup,andquicklyrealizedthereweremanymoretinypiecesthanshecoulddealwith.Itseemedi()toclea......
  • 在VS2022和VS2012共存的电脑上安装VS212扩展注意事项
    1、下载一个专用于VS2012的扩展文件,直接双击下载的扩展文件安装后,显示安装成功。但是你可能会发现在VS2022,VS2012中都找不到此扩展。这就要求必须用VS2022的命令将其卸载,然后再用VS2012进行安装。2、用VS2022的命令卸载打开VS2022开发工具先找出此扩展的vsixid:将原扩展文件......
  • 6980. 【2021.02.03冬令营模拟】你的世界(world) Another Solution
    ProblemDescriptionInput从文件world.in中读入数据。Output输出到文件world.out中。输出共T行,第i行表示第i组测试数据的答案,如果可行则输出Yes,否则输出No。SampleInputCopy样例输入1:123000000111001样例输入2:134000001010001101100011......