C#设计模式18——迭代器模式的写法
是什么:
迭代器模式是一种行为型设计模式,它允许客户端通过一种统一的方式遍历集合对象中的元素,而无需暴露集合对象的内部结构。
为什么:
使用迭代器模式可以使得客户端程序与集合对象解耦,从而可以更加灵活地对集合对象进行遍历操作。此外,迭代器模式还可以提高代码的复用性,简化客户端程序的代码量,使得代码更加易于维护和扩展。
怎么做:
在迭代器模式中,我们首先定义一个抽象迭代器接口 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 接口中的操作方法,并且管理着对集合对象的引用,以便于操作集合中的元素。
何时使用:
当我们需要遍历一个聚合对象中的所有元素时,可以使用迭代器模式。此外,如果我们希望更加灵活并且不暴露集合对象的内部结构时,也可以使用迭代器模式。
C#设计模式18——迭代器模式的写法的更多相关文章
- Python进阶:设计模式之迭代器模式
在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...
- 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...
- js设计模式——4.迭代器模式
js设计模式——4.迭代器模式 代码演示 /*js设计模式——迭代器模式*/ class Iterator { constructor(container) { this.list = contain ...
- 实践GoF的设计模式:迭代器模式
摘要:迭代器模式主要用在访问对象集合的场景,能够向客户端隐藏集合的实现细节. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:迭代器模式>,作者:元闰子. 简介 有时会遇到这 ...
- 设计模式之迭代器模式(Iterator)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器
上周六就開始写这篇博客,之后一直耽误了.到前天才開始写.今天醒的早,就把这部分整理一下. 本文内容參考易学设计模式和马士兵的迭代器模式的视频. 了解迭代器模式一个作用就是让你在使用 迭代器遍历集合类的 ...
- 【GOF23设计模式】迭代器模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_迭代器模式.JDK内置迭代器.内部类迭代器 package com.test.iterator; /** * 自定义的迭代 ...
- [设计模式] 16 迭代器模式 Iterator Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对迭代器模式是这样说的:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示. 类图和实例: 迭代器模式由以下角 ...
- php设计模式之迭代器模式
今天的PHP设计模式系列的主角是迭代器(Iterator)模式,迭代器模式提供了抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代. 迭代器(Iterator)模式,它在一个很常见的过程上提供了 ...
随机推荐
- 16、strconv
1.strconv是什么? strconv是用来处理字符串和基本类型之间的转换的 2.strconv的使用 /** * @author ly (个人博客:https://www.cnblogs.com ...
- pycharm设置Ctrl+鼠标滚轮放大缩小字体
方式一: File --> setting --> Editor-->General,勾选. 方式二: 放大的设置 File --> setting --> Keymap ...
- DTD快速入门
DTD快速入门
- C# 如何读取Excel文件
当处理Excel文件时,从中读取数据是一个常见的需求.通过读取Excel数据,可以获取电子表格中包含的信息,并在其他应用程序或编程环境中使用这些数据进行进一步的处理和分析.本文将分享一个使用免费库来实 ...
- electron入门之配置镜像加速(四)
electron入门到入土,配置阿里镜像加速.为了防止后面我们打包龟速,需要给electron配置阿里镜像加速 在下面的文件内添加阿里镜像加速,你的文件位置不一定是这个 C:\Program File ...
- PowerDotNet平台化软件架构设计与实现系列(17):PCRM个人用户管理平台
个人用户管理是业务系统中非常基础且重要的一个公共服务系统,我们写的绝大多数应用都和个人用户或会员有关,用户(会员)数据安全无小事,必须有一个完备的用户管理平台系统. 因为不同公司的主业务不同,个人用户 ...
- 浅谈6种流行的API架构风格
前言 API在现代软件开发中扮演着重要的角色,它们是不同应用程序之间的桥梁.编写业务API是日常开发工作中最常见的一部分,选择合适的API框架对项目的成功起到了至关重要的作用.本篇文章将浅谈一下当前6 ...
- 文心一言 VS 讯飞星火 VS chatgpt (23)-- 算法导论4.2 5题
五.V.Pan 发现一种方法,可以用 132 464 次乘法操作完成 68 x 68 的矩阵相乘,发现另一种方法,可以用 143 640 次乘法操作完成 70 x 70 的矩阵相乘,还发现一种方法,可 ...
- OPPO关停自研芯片公司哲库,这对行业将产生什么影响?
OPPO什么时候关停自研芯片公司哲库? 公元2023年5月12日,OPPO关停了自研芯片公司哲库.这也是汶川大地震的日子,而OPPO创始人是四川人,真是冥冥之中自有天意.OPPO公司在一份声明中表示, ...
- 【云小课】版本管理发展史之Git+——代码托管
摘要:选择一款版本管理工具,已经被大多数企业作为项目的必要准备工作之一,相信没有一个开发者没有听过Git.SVN这些工具. 今天我们来寻根溯源,扒一扒版本管理的发展史. 版本管理工具之于软件开发,犹如 ...