C#设计模式:迭代器模式(Iterator Pattern)
一,什么是迭代器模式(Iterator Pattern)
提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示
二,看下面例子:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _15.迭代器模式 { //提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示class Program{static void Main(string[] args){Aggregate<object> a = new ConcreteAggregate<object>();a.add("中国人");a.add("美国人");a.add("日本人");Iterator<object> i = a.iterator();while (i.hasNext()){Console.WriteLine("获取当前:" + i.GetObj());Console.WriteLine("获取下一个:" + i.next());Console.WriteLine("是否是第一个:" + i.IsFirst());Console.WriteLine("是否是最后一个:" + i.IsLast());}}}/// <summary>/// 迭代器接口,迭代器接口负责定义,访问和遍历元素的接口/// </summary>/// <typeparam name="T"></typeparam>public interface Iterator<T> where T : new(){/// <summary>///是否还有下一个元素 true 表示有,false 表示没有 /// </summary>/// <returns></returns>bool hasNext();/// <summary>/// 返回当前位置的元素并将位置移至下一位 /// </summary>/// <returns></returns> T next();/// <summary>/// 判断是否是第一个/// </summary>/// <returns></returns>bool IsFirst();/// <summary>/// 判断游标是否是容器的最后一个/// </summary>/// <returns></returns>bool IsLast();/// <summary>/// 获取当前游标指向的元素/// </summary>/// <returns></returns> T GetObj();}/// <summary>/// 具体迭代器类,具体迭代器类的目的主要是实现迭代器接口,并记录遍历的当前位置。/// </summary>/// <typeparam name="T"></typeparam>public class ConcreteIterator<T> : Iterator<T> where T : new(){private List<T> list = new List<T>();private int cursor = 0;public ConcreteIterator(List<T> list){this.list = list;}/// <summary>///是否还有下一个元素 true 表示有,false 表示没有 /// </summary>/// <returns></returns>public bool hasNext(){return cursor != list.Count();}/// <summary>/// 获取下一个/// </summary>/// <returns></returns>public T next(){T obj = new T();if (this.hasNext()){obj = this.list[cursor++];}return obj;}/// <summary>/// 判断是否是第一个/// </summary>/// <returns></returns>public bool IsFirst(){return cursor - 1 == 0 ? true : false;}/// <summary>/// 判断游标是否是容器的最后一个/// </summary>/// <returns></returns>public bool IsLast(){return cursor == (list.Count()) ? true : false;}/// <summary>/// 获取当前游标指向的元素/// </summary>/// <returns></returns>public T GetObj(){return list[cursor];}}/// <summary>/// 容器接口,容器接口负责提供创建具体迭代器角色的接口/// </summary>/// <typeparam name="T"></typeparam>public interface Aggregate<T> where T : new(){/// <summary>/// 添加一个元素/// </summary>/// <param name="obj"></param>void add(T obj);/// <summary>/// 移除一个元素 /// </summary>/// <param name="obj"></param>void remove(T obj);/// <summary>/// 获取容器的迭代器 /// </summary>/// <returns></returns>Iterator<T> iterator();}/// <summary>/// 具体容器类。/// </summary>/// <typeparam name="T"></typeparam>public class ConcreteAggregate<T> : Aggregate<T> where T : new(){private List<T> list = new List<T>();public void add(T obj){list.Add(obj);}public void remove(T obj){list.Remove(obj);}public Iterator<T> iterator(){return new ConcreteIterator<T>(list);}} }
转载于:https://www.cnblogs.com/May-day/p/8963150.html
C#设计模式:迭代器模式(Iterator Pattern)相关推荐
- 设计模式 - 迭代器模式(iterator pattern) 具体解释
迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...
- 设计模式:迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern): 属于行为型模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即: 不暴露其内部结构.
- 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手
一.你在开发中使用过迭代吗? 当你在使用JavaScript开发客户端应用的时候使用过for...in吗? 1<script type="text/javascript&q ...
- 听webcast的行为型模式篇-迭代器模式(Iterator Pattern) 记录
< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> dotnet或java里 ...
- 迭代器模式(Iterator pattern)
一. 引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator(); w ...
- 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern
1 package com.tn.pattern; 2 3 public class Client { 4 public static void main(String[] args) { 5 Obj ...
- 33迭代器模式(Iterator Pattern)
动机(Motivate): 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种" ...
- java设计模式迭代器模式_Java中的迭代器设计模式
java设计模式迭代器模式 Iterator design pattern in one of the behavioral pattern. Iterator pattern is used to ...
- 设计模式——迭代器模式(遍历王者荣耀和英雄联盟英雄信息)
本文首发于cdream的个人博客,点击获得更好的阅读体验! 欢迎转载,转载请注明出处. 本文主要讲述迭代器模式,并使用遍历不同数据结构的王者荣耀和英雄联盟英雄作为例子帮助大家理解,最后附上阿离美图一张 ...
- 设计模式——迭代器模式(附代码示例)
一. 传统方式 以学校院系展示为例,实现在一个页面展示学校的院系组成,一个学校有多个学院,一个学院有多个系.传统方式实现类图如下: 传统方式将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织 ...
最新文章
- 通过源码分析Android 的消息处理机制
- UVALive - 7163
- 汇编语言--常见转移指令
- 今日头条|张一鸣:我遇到的优秀年轻人的5个特质
- Kafka分区分配策略(1)——RangeAssignor
- 机器学习用于数字图像处理_用于创建数字内容的免费电子学习工具
- 微信小程序报thirdScriptError Cannot read property 'setData' of undefined
- 前端零基础 JS 教学 第六天 06 - 静态实例成员与 Date日期,包装类型,字符串方法...
- VS2010中使用Fixdays字体的方法
- 64、剑指offer--滑动窗口最大值
- 微波烹调,营养损失多or少?
- 苹果智能拨号软件_iPhone智能性升级 多功能通话辅助软件
- 图论1:哥尼斯堡七桥问题的证明
- 怎么去思考一个问题,提高解决问题的能力
- 为计算机发展做出贡献的人的简介,【七十年七十人】郑守淇:为我国计算机事业奉献一生...
- UnderStand的使用说明
- 逻辑运算符符号化命题——数理逻辑
- 公开募集催生Namco Bandai(南梦宫万代)的预售实验
- 金属有机骨架MOFs装载抗病毒药物|ZIF-8/石墨烯复合纳米颗粒(ZIF-8/GQDs)负载阿霉素(DOX)齐岳
- Hexo(sakura)文章增添字数统计和阅读时长功能
热门文章
- 格式化zookeeper命令_zookeeper原理篇Zookeeper的数据存储与恢复原理
- 企业远程系统UI效果
- 企业软件介绍主页html模板
- 电脑录制操作最为gif动态图工具
- Google推出了一个名为“Google Public DNS”的域名解析系统
- libmysql.dll是否真的要拷贝到c:\windows目录下呢?
- Magento教程 19:客户评论的审核与发布! (Pending Reviews)
- 关于大型网站技术演进的思考(四)--存储的瓶颈(4)
- Magento的基本架构
- linux如何安装infer