首页 > 编程语言 >C#设计模式18——迭代器模式的写法

C#设计模式18——迭代器模式的写法

时间:2023-05-09 22:57:15浏览次数:30  
标签:迭代 Iterator C# 18 list 对象 集合 设计模式 public

是什么:

迭代器模式是一种行为型设计模式,它允许客户端通过一种统一的方式遍历集合对象中的元素,而无需暴露集合对象的内部结构。

为什么:

使用迭代器模式可以使得客户端程序与集合对象解耦,从而可以更加灵活地对集合对象进行遍历操作。此外,迭代器模式还可以提高代码的复用性,简化客户端程序的代码量,使得代码更加易于维护和扩展。

怎么做:

在迭代器模式中,我们首先定义一个抽象迭代器接口 Iterator,它定义了常规的迭代器操作方法,如 HasNext、Next 等等。

接下来,我们定义一个抽象的聚合类 Aggregate,它持有一个用于遍历其元素的 Iterator 对象,并且定义了一个返回 Iterator 对象的方法 CreateIterator。

在其具体子类中,我们定义具体的集合类,如 ListAggregate 等,它们实现了自己的 CreateIterator 方法,返回一个针对该集合类的迭代器对象 ConcreteIterator。

在 ConcreteIterator 迭代器对象中,我们实现了 Iterator 接口中的操作方法,并且管理着对集合对象的引用,以便于操作集合中的元素。

下面是在 C# 语言中实现迭代器模式的一个示例代码:  

// 抽象迭代器
public interface Iterator
{
    bool HasNext();
    object Next();
}

// 抽象聚合类
public interface Aggregate
{
    Iterator CreateIterator();
}

// 具体迭代器
public class ConcreteIterator : Iterator
{
    private ListAggregate list;
    private int index = 0;

    public ConcreteIterator(ListAggregate list)
    {
        this.list = list;
    }

    public bool HasNext()
    {
        return index < list.Count;
    }

    public object Next()
    {
        if (HasNext())
        {
            return list[index++];
        }
        else
        {
            return null;
        }
    }
}

// 具体聚合类
public class ListAggregate : Aggregate
{
    private List<object> list = new List<object>();

    public Iterator CreateIterator()
    {
        return new ConcreteIterator(this);
    }

    public int Count
    {
        get { return list.Count; }
    }

    public object this[int index]
    {
        get { return list[index]; }
        set { list.Add(value); }
    }
}

在这个代码示例中,我们首先定义了一个抽象迭代器接口 Iterator 和一个抽象聚合类 Aggregate,并在其中定义了常规的迭代器操作方法和返回迭代器对象的方法 CreateIterator。接下来,我们定义了具体的聚合类 ListAggregate,并实现了其 CreateIterator 方法,返回一个针对该集合类的迭代器对象 ConcreteIterator。在 ConcreteIterator 对象中,我们实现了 Iterator 接口中的操作方法,并且管理着对集合对象的引用,以便于操作集合中的元素。

何时使用:

当我们需要遍历一个聚合对象中的所有元素时,可以使用迭代器模式。此外,如果我们希望更加灵活并且不暴露集合对象的内部结构时,也可以使用迭代器模式。

 

标签:迭代,Iterator,C#,18,list,对象,集合,设计模式,public
From: https://www.cnblogs.com/for-easy-fast/p/17386599.html

相关文章

  • 高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数
    全文链接:http://tecdat.cn/?p=23378最近我们被客户要求撰写关于高维数据惩罚回归方法的研究报告,包括一些图形和统计输出。在本文中,我们将使用基因表达数据。这个数据集包含120个样本的200个基因的基因表达数据。这些数据来源于哺乳动物眼组织样本的微阵列实验1介绍在本文中,我......
  • WSO2文件上传漏洞(CVE-2022-29464)
    WSO2文件上传漏洞(CVE-2022-29464)是OrangeTsai发现的WSO2上的严重漏洞。该漏洞是一种未经身份验证的无限制任意文件上传,允许未经身份验证的攻击者通过上传恶意JSP文件在WSO2服务器上获得RCE。访问春秋云镜靶场 访问地址并抓包改包为以下poc:POST/fileupload/toolsAnyHTTP/1......
  • C#设计模式16——中介者模式的写法
    是什么:中介者模式是一种行为型设计模式,它定义了一个中介者对象来封装一系列对象之间的交互。中介者模式可以使得对象间的交互更加松耦合,避免了对象之间的直接依赖,从而使系统更加灵活、易于扩展和维护。为什么:中介者模式可以将系统中的对象之间的交互行为进行抽象,从而可以提高系......
  • CasaOs安装和卸载
    QuickSetupCasaOS一步安装:wget-qO-https://get.casaos.io|sudobashorcurl-fsSLhttps://get.casaos.io|sudobashUninstallCasaOSv0.3.3ornewercasaos-uninstallBeforev0.3.3curl-fsSLhttps://get.icewhale.io/casaos-uninstall.sh|sudobash这......
  • C#设计模式17——责任链模式的写法
    是什么:责任链模式是一种行为型设计模式,它允许对象组成一个链并依次检查另一个对象是否可以处理请求。如果一个对象可以处理请求,它处理请求,并且负责将请求传递给下一个对象,直到请求被处理为止。为什么:责任链模式可以降低系统中对象之间的耦合度,并提高系统的灵活性和可维护性。同......
  • 随身wifi备份QCN
    备份qcn文件,需要先进行root,办法就是安装magisk,再刷一下修补过的boot文件就有root了。首先安装ardc,这是一个投屏软件,解决板子没有屏幕无法操作的问题,它的操作逻辑是鼠标左键为点击功能,右键为返回。安装完ardc后先别打开,检查一下任务管理器中,有adb或者androiddebugbridge程序在后......
  • [SWPUCTF 2021 新生赛]easyapp
    查壳:发现里边有个压缩包,弄出来看看:再查壳看看:啥也不是,把它扔进IDA:没有伪代码,一个字‘找’,关键点(是否IDA能成功反编译,还是说用了java的反编译才行,是否有flag或者CTF之类的字样):发现特殊字样,跟进:大写String?大胆点进jadx:成功,告诉我们什么?要大胆点,不然会浪费很多的时间:找......
  • c++打卡第二十一天
    一、爱因斯坦的数学题1、问题描述2、设计思路。①、输入N,从1到n遍历。②、寻找满足上述条件的数,得到符合条件的个数加一并打印出这个数。3、流程图4、代码实现#include<iostream>usingnamespacestd;intmain(){intN;intflag=1;intcount;whi......
  • C#设计模式15——观察者模式的写法
    是什么:观察者模式是一种设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象状态发生改变时,它的所有依赖者都能够得到相应的通知并作出相应的反应。观察者模式也被称为发布-订阅模式。为什么:观察者模式可以实现对象之间的松耦合,从而使得对象更容易扩展和维护。同时,......
  • Transformer 模型中的positional encoding(位置编码)计算理解(2)
            以下(以上)内容来自(参考):https://www.bilibili.com/video/BV1Di4y1c7Zm?p=2&vd_source=6292df769fba3b00eb2ff1859b99d79e  importnumpyasnpdefgetPositionEncoding(seq_len,dim,n=10000):##seq_len:序列长度##dim词向量的维......