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)模式,它在一个很常见的过程上提供了 ...
随机推荐
- UMP系统概述
突出性能: 1.低成本,高性能 2.开源数据库 UMP在设计时要实现一下原则: 多租户:
- 4 HTTP的“四层”和“七层”
目录 1 四层:TCP/IP 网络分层模型 2 七层:OSI网络分层模型 3 TCP/IP 协议栈的工作方式 1 四层:TCP/IP 网络分层模型 四层是指TCP/IP 网络分层模型. 第一层:&qu ...
- 记录一个MySQL中order by 和 limit 连用导致分页查询不生效的坑
具体现象和这位同学的一致,具体的解决办法也是参考这位同学的做法 参考文章地址:https://www.cnblogs.com/yuluoxingkong/p/10681583.html
- LCIS最长公共上升子序列!HDU-1423
This is a problem from ZOJ 2432.To make it easyer,you just need output the length of the subsequence ...
- 华企盾DSC忘记了数据库解锁密码
解决方法:登录数据库控制台,找到DSE所使用数据库默认名字"DSEDB",打开表"FileEncryptKey_TABLE",如下图所示: 第一行,自动生成 ...
- NetSuite 开发日记 —— 估价单(Estimate)新建项目(Project)自动填入项目字段
Background 用户在估价单(Estimate)点击「项目」字段旁边+按钮新建项目(Project),在项目的自定义字段中自动填入估价单ID 用户在项目记录存在切换自定义表格行为 Analysi ...
- 在Linux服务器上装jenkins(方式一:war包)
官网下载jenkins https://www.jenkins.io/zh/download/ 官网下载太慢,可以去清华镜像下载(百度搜索:清华镜像) 下载的文件是jenkins.war 把安装文件放 ...
- 设计模式之设计模式概述-shejimoshigaishu
title: 设计模式之设计模式概述 date: 2022-12-04 00:21:18.469 updated: 2022-12-11 23:03:45.617 url: https://www.y ...
- 2023.3 Idea配置Tomcat环境
tomcat配置 下载tomcat 先到官网(按住Ctrl再左键点击直接打开官网)下载64位的tomcat,网速慢就用魔法下 创建项目.模块 打开idea(我用的是最新的idea的专业版,ui有点变化 ...
- Shiro-550反序列化漏洞(CVE-2016-4437)复现
本文章使用Shiro_exploit此工具复现,靶机环境为vulhub 项目地址: https://github.com/insightglacier/Shiro_exploit https://gi ...