行为型模式 - 迭代器模式iterator

模式的定义与特点
迭代器模式(iterator Pattern),为的提是可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开。迭代模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。
模式的优点
- 它支持以不同的方式遍历一个聚合对象。
- 迭代器简化了聚合类。
- 在同一个聚合上可以有多个遍历。
- 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
模式的缺点
- 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

using DesignPattern.ChainofResponsibilityPattern;
using DesignPattern.IteratorPatttern;
using DesignPattern.MementoPattern;
using DesignPattern.ObserverPattern;
using DesignPattern.VisitorPattern;
using System;
using System.Collections.Generic;
namespace DesignPattern
{
internal class Program
{
static void Main(string[] args)
{
IteratorHelper();
}
#region Pattern - Iterator
static void IteratorHelper()
{
ObjectRepository<string> _stringRepository = new ObjectRepository<string>();
_stringRepository.AddObject("A");
_stringRepository.AddObject("B");
_stringRepository.AddObject("C");
_stringRepository.AddObject(11.ToString());
ObjectRepository<int> _intRepository = new ObjectRepository<int>();
_intRepository.AddObject(-1);
_intRepository.AddObject(10);
_intRepository.AddObject(20);
_intRepository.AddObject(30);
for (Iterator<string> _iterator = _stringRepository.GetIterator(); _iterator.HasNext();)
{
Console.WriteLine("Object is: " + _iterator.Next());
}
Console.WriteLine("===================================================================");
for (Iterator<int> _iterator = _intRepository.GetIterator(); _iterator.HasNext();)
{
Console.WriteLine("Object is: " + _iterator.Next());
}
Console.ReadLine();
#endregion
}
}
}
//=======================================================================================================
namespace DesignPattern.IteratorPatttern
{
/// <summary>
/// 迭代器
/// </summary>
public interface Iterator<T>
{
bool HasNext();
T Next();
}
/// <summary>
/// 容器集装箱
/// </summary>
public interface IContainer<T>
{
Iterator<T> GetIterator();
}
/// <summary>
/// 对象库
/// </summary>
public class ObjectRepository<T> : IContainer<T>
{
ObjectIterator<T> m_ObjectIterator;
public ObjectRepository()
{
m_ObjectIterator = new ObjectIterator<T>();
}
public Iterator<T> GetIterator()
{
return m_ObjectIterator;
}
public void AddObject(T obj)
{
m_ObjectIterator.m_ObjectRepository.Add(obj);
}
/// <summary>
/// 对象迭代器
/// </summary>
class ObjectIterator<Tobjcet> : Iterator<Tobjcet>
{
public ObjectIterator()
{
m_ObjectRepository = new List<Tobjcet>();
}
int index;
public List<Tobjcet> m_ObjectRepository;
public bool HasNext()
{
if (index < m_ObjectRepository.Count)
{
return true;
}
return false;
}
Tobjcet Iterator<Tobjcet>.Next()
{
if (HasNext())
{
return m_ObjectRepository[index++];
}
return default;
}
}
}
}

总结:
个人觉得迭代器模式可以和备忘录模式(Memeton)一起使用,不过一般我们都直接使用for、while或者foreach了,我不知道这个存在的使用地点是什么,可能层次不高还摸不透吧,等之后慢慢的揣摩运用方式和地点吧。
希望大家:点赞,留言,关注咯~
唠家常
今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加我QQ:841298494,大家一起进步。
- 客官,看完get之后记得点赞哟!
- 小伙伴你还想要别的知识?好的呀,分享给你们
今日推荐
行为型模式 - 迭代器模式iterator的更多相关文章
- 【设计模式】行为型04迭代器模式(Iterator Pattern)
学习地址:http://www.runoob.com/design-pattern/iterator-pattern.html 迭代器模式,简单来说就是通过迭代的方式对集合进行遍历,在集合的学习中也一 ...
- Java设计模式—解释器模式&迭代器模式简介
解释器模式在实际的系统开发中使用得非常少,因为它会引起效率.性能以及维护等问题,一般在大中型的框架型项目能够找到它的身影,如一些数据分析工具.报表设计工具.科学计算工具等,若你确实遇到" ...
- 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式
[状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略, ...
- Python3-设计模式-迭代器模式
Python3中的迭代器 迭代器模式主要是访问集合元素的一中方式,迭代器不会把整个集合对象加载到内存,而是按照顺序将集合中的元素一个一个的进行迭代,这样每次迭代的时候只取少量的元素,比较省内存 注: ...
- C#设计模式——迭代器模式(Iterator Pattern)
一.概述在软件开发过程中,我们可能会希望在不暴露一个集合对象内部结构的同时,可以让外部代码透明地访问其中包含的元素.迭代器模式可以解决这一问题.二.迭代器模式迭代器模式提供一种方法顺序访问一个集合对象 ...
- javascript设计模式-迭代器模式(Iterator)
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 设计模式 -- 迭代器模式(Iterator)
--------------------------------------------------------------------- 1.场景问题 考虑这样一个问题: 9个学生对象分别通过数组存 ...
- python 迭代器模式
迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行 ...
- Python使用设计模式中的责任链模式与迭代器模式的示例
Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...
- C#设计模式学习笔记:(15)迭代器模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7903617.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲行为型设计模式的第三个模式--迭 ...
随机推荐
- jmeter分布式压测对master、slave防火墙配置
首先要了解jmeter分布式压测的基础概念:master为统计结果的服务器,slave为各台压力机,如下图所示 一.结论 针对master 1.修改jmeter.properties的client.r ...
- 基于k8s的CI/CD的实现
综述 首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里. 在微服务.DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情.虽然市面上目前已经存在了比较成熟的自动化 ...
- PHY驱动调试之 --- MDIO/MDC接口22号和45号条款(一)
最近在调试一款Phy的驱动,从没有任何头绪到略有了解经历了太多的痛苦,于是决定写这个系列篇记录一下.特别感谢无数优秀的博主无私奉献很多优秀的博文给予了我很大的帮助.在这个系列篇中,我也会转载部分优秀的 ...
- Dubbo-聊聊Dubbo协议
前言 Dubbo源码阅读分享系列文章,欢迎大家关注点赞 SPI实现部分 Dubbo-SPI机制 Dubbo-Adaptive实现原理 Dubbo-Activate实现原理 Dubbo SPI-Wrap ...
- .NET周报【11月第3期 2022-11-22】
国内文章 .NET Conf China 2022 第一批讲师阵容大揭秘!整个期待了! https://mp.weixin.qq.com/s/4p89hhBPw6qv-0OB_T_TOg 目光看过来 ...
- 深入浅出学习透析Nginx服务器的基本原理和配置指南「Keepalive性能分析实战篇」
Linux系统:Centos 7 x64 Nginx版本:1.11.5 Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 HTTP,HTTPS 和邮件相关(SMTP,POP3,IMAP) ...
- 快速创建Jenkins Job
Jenkins Job 类型 **1.Freestyle project ** 这个是jenkins的基础功能,可以用它来执行各种构建任务,他只能构建在一个电脑上,如果没有太多的需求,这个job基本够 ...
- Curve 块存储应用实践 -- iSCSI
Curve 是云原生计算基金会 (CNCF) Sandbox 项目,是网易数帆发起开源的高性能.易运维.云原生的分布式存储系统. 为了让大家更容易使用以及了解 Curve,我们期望接下来通过系列应用实 ...
- 复杂mysql/多表查询
目录 多表查询的两种方法 sql语句基础语法补充 concat / existe / 表字段 增加 修改 删除 复杂sql练习题 多表查询的两种方法 方式1:连表操作 inner join 内连接 s ...
- echarts map地图中绘制浙江省市区县乡镇多级联动边界下钻的最新geojson数据文件获取和更新
目录 ECharts Map地图的显示 GeoJSON数据文件获取 在ECharts中绘制浙江省的数据 ECharts Map地图的显示 ECharts支持地理坐标显示,专门提供了一个geo组件,在s ...