首页 > 其他分享 >IteratorPattern-迭代器模式

IteratorPattern-迭代器模式

时间:2023-08-23 09:01:44浏览次数:31  
标签:遍历 聚合 迭代 模式 IteratorPattern IIterator array public

在C#中,迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而无需暴露聚合对象的内部表示。

迭代器模式有以下几个关键角色:

Iterator(迭代器):定义访问和遍历元素的接口。

ConcreteIterator(具体迭代器):实现迭代器接口,实现对聚合对象的具体遍历操作。

Aggregate(聚合):定义创建迭代器的接口。

ConcreteAggregate(具体聚合):实现聚合接口,创建具体迭代器对象。

下面是一个示例,展示如何在C#中使用迭代器模式来遍历一个集合对象:

namespace IteratorPattern_迭代器模式
{
    internal class Program
    {
        // Iterator
        public interface IIterator<T>
        {
            bool HasNext();
            T Next();
        }
        // ConcreteIterator
        public class ArrayIterator<T> : IIterator<T>
        {
            private readonly T[] _array;
            private int _index;

            public ArrayIterator(T[] array)
            {
                _array = array;
                _index = 0;
            }

            public bool HasNext()
            {
                return _index < _array.Length;
            }

            public T Next()
            {
                if (_index < _array.Length)
                {
                    return _array[_index++];
                }
                throw new IndexOutOfRangeException();
            }
        }
        // Aggregate
        public interface ICollection<T>
        {
            IIterator<T> CreateIterator();
        }
        // ConcreteAggregate
        public class MyCollection<T> : ICollection<T>
        {
            private readonly T[] _array;

            public MyCollection(T[] array)
            {
                _array = array;
            }
            public IIterator<T> CreateIterator()
            {
                return new ArrayIterator<T>(_array);
            }
        }
        static void Main(string[] args)
        {
            string[] array = new string[] { "A", "B", "C", "D", "E" };
            ICollection<string> collection = new MyCollection<string>(array);
            IIterator<string> iterator = collection.CreateIterator();

            while (iterator.HasNext())
            {
                string element = iterator.Next();
                Console.WriteLine(element);
            }
            Console.Read();
            //输出结果
            //A
            //B
            //C
            //D
            //E
        }
    }
}

在上述示例中,使用迭代器模式实现了一个自定义的集合类(MyCollection)。集合类实现了ICollection接口,其中定义了创建迭代器的方法CreateIterator。具体迭代器(ArrayIterator)实现了IIterator接口,实现了对数组的遍历操作。通过调用集合类的CreateIterator方法,获取一个具体迭代器对象,然后使用迭代器的Next和HasNext方法进行遍历。

在Client中,首先创建了一个字符串数组,并通过集合类的CreateIterator方法获取迭代器对象。然后通过迭代器的Next和HasNext方法遍历并输出每个元素。

迭代器模式使得聚合对象和遍历算法分离,遍历算法被封装在迭代器中,可以在不改变聚合对象的情况下灵活地对其进行遍历。这样可以提高代码的可维护性和可复用性。同时,迭代器模式还可以隐藏聚合对象的内部结构,保护数据的安全性。

标签:遍历,聚合,迭代,模式,IteratorPattern,IIterator,array,public
From: https://www.cnblogs.com/ZHIZRL/p/17650111.html

相关文章

  • 《学爸》成爆款背后,马栏山以BOT模式示范“文化+科技”路径
    文|智能相对论作者|范柔丝今年暑期档的爆款电影,必有《学爸》一席之地。这部给众多深陷教育旋涡的家长带来深刻思考的电影,就是马栏山视频文创产业园经过3年筹备,首部本土孵化出品的教育现实体裁院线大电影。据猫眼专业版数据,截至8月22日18:00,《学爸》总票房破2.42亿元,评分9.4分。《学......
  • 浅谈谷歌优化之“智能出价模式”
      智能点击付费可以帮助您通过人工出价获得更多转化。其工作原理是,根据点击在您网站上促成销售或其他转化的可能性大小,相应地自动调整您的人工出价。“目标每次转化费用”和“目标广告支出回报率”这两项智能出价策略会分别根据您设定的每次转化费用目标值和广告支出回报率目标......
  • 电脑硬件配置更新迭代迅速,会对仿真软件带来哪些影响?
    随着科技的飞速发展,电脑硬件的更新换代速度也日益加快。新的处理器,更大的内存,更快的硬盘,还有更强大的显卡,都让我们的计算能力不断突破极限。然而,这种快速发展也对仿真软件产生了深远的影响。 电脑配置 仿真软件,是一种利用计算机技术来模拟现实世界系统的行为和过程的程序。......
  • IdentityServer4 客户端模式(.net5)
    添加服务端(api)1.添加Nuget包Nuget添加IdentityServer42.添加Config.cs配置类publicclassConfig{///<summary>///提示invalid_scope添加///</summary>publicstaticIEnumerable<ApiScope>ApiScopes=>newApiScope[]{newApiS......
  • CommandPattern-命令模式
    在C#中,命令模式(CommandPattern)是一种行为型设计模式,它将请求封装成一个对象,这样可以让请求的发送者和接收者解耦,并且可以对请求进行参数化、队列化、记录日志、撤销等操作。命令模式有以下几个关键角色:Command(命令):定义了执行操作的接口,通常包括一个执行方法。ConcreteCommand(......
  • LVS负载均衡之NAT模式构建
    ※实验环境(1)系统:centos7.9(2)虚拟机:4台centos7.9,1台作为nfs共享服务器( NFS共享服务搭建步骤)为了保证源目标的一致性,采用源nat转换,将客户端发送的请求在负载调度器上经过转换后再发送到真实服务器。一、负载调度器配置(1)根据拓扑图配置IP地址(略)(2)安装ipvsadmyuminstallipvsadm-y......
  • ChainOfResponsibilityPattern-责任链模式
    在C#中,责任链模式(ChainofResponsibilityPattern)是一种行为型设计模式,它可让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。请求沿着一个链传递,直到有一个对象处理它为止。责任链模式有以下几个关键角色:Handler(处理器):定义处理请求的接口,并通常持有一......
  • TemplateMethodPattern-模板方法模式
    在C#中,模板方法模式(TemplateMethodPattern)是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤延迟到子类中实现。模板方法模式通过将公共的算法步骤抽象到基类中,并且通过在基类中定义一个模板方法来调用这些步骤,从而实现代码的复用和灵活性。模板方法模式有以下几个关键角......
  • py之路——day13-20230821:生成器和迭代器
    作者:zb一、列表生成式1、定义用来生成列表的表达式2、特点可以使代码更加简洁示例代码如下:1#普通方法定义列表2a=[1,2,3]3print(a)4#列表生成式方法定义列表5b=[i*2foriinrange(10)]6print(b)7#如果不用列表生成式,上述b列表定义会很麻烦......
  • 设计模式和七大原则概述及单一职责原则详解
    设计模式的目的编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的1.代码重用性(相同代码,不用重复编写)2.可读性(编程规范性,便于其他程序员的阅读和理解)3.可扩展性(当需要增加新的功能时,非常的方便)4.可靠......