一,什么是迭代器模式(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 = ; 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 - == ? 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);
}
}
}

C#设计模式:迭代器模式(Iterator Pattern)的更多相关文章

  1. 设计模式 - 迭代器模式(iterator pattern) 具体解释

    迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...

  2. C#设计模式——迭代器模式(Iterator Pattern)

    一.概述在软件开发过程中,我们可能会希望在不暴露一个集合对象内部结构的同时,可以让外部代码透明地访问其中包含的元素.迭代器模式可以解决这一问题.二.迭代器模式迭代器模式提供一种方法顺序访问一个集合对象 ...

  3. 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)

    上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...

  4. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)

    原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...

  5. 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)

    设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...

  6. 设计模式系列之迭代器模式(Iterator Pattern)——遍历聚合对象中的元素

    模式概述 模式定义 模式结构图 模式伪代码 模式改进 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修 ...

  7. 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释

    迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...

  8. 二十四种设计模式:迭代器模式(Iterator Pattern)

    迭代器模式(Iterator Pattern) 介绍提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. 示例有一个Message实体类,某聚合对象内的各个元素均为该实体对象,现 ...

  9. [设计模式] 16 迭代器模式 Iterator Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对迭代器模式是这样说的:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示. 类图和实例: 迭代器模式由以下角 ...

  10. javascript设计模式-迭代器模式(Iterator)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 【NOIP2016提高A组模拟8.14】传送带

    题目 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.FTD在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在FTD想从A点走 ...

  2. linux入门 一些常见命令

    chvt 切换终端 用法 1是终端 7是图形界面 sudo chvt 1 or 7 cp 复制文件/目录 -a : 通常在复制目录时使用,保存链接,文件属性并递归复制目录 -f:若文件在目标路径中则强 ...

  3. 【bzoj4137】[FJOI2015]火星商店问题

    *题目描述: 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品,其标价可能 ...

  4. (3.3)狄泰软件学院C++课程学习剖析四

    对课程前面40课的详细回顾分析(二) 1.一个类的成员变量是对于每个对象专有的,但是成员函数是共享的. 2.构造函数只是决定一个对象的初始化状态,而不能决定对象的诞生.二阶构造人为的将初始化过程分为了 ...

  5. join当前线程等待指定的线程结束后才能继续运行

    模拟一个QQ游戏大厅斗地主 /** sleep(休眠.睡眠) join当前线程等待指定的线程结束后才能继续运行 */ class Player extends Thread{ private Stri ...

  6. AOF — Redis 设计与实现

    w AOF — Redis 设计与实现http://redisbook.readthedocs.io/en/latest/internal/aof.html

  7. LeetCode 103——二叉树的锯齿形层次遍历

    1. 题目 2. 解答 定义两个栈 s_l_r.s_r_l 分别负责从左到右和从右到左遍历某一层的节点,用标志变量 flag 来控制具体情况,根节点所在层 flag=1 表示从左到右遍历,每隔一层改变 ...

  8. Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText()、CheckedState()

    Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText().CheckedState() 示例构想: 用 ...

  9. Navicat12安装与激活

    安装Navicat 1.下载软件和激活工具 链接:https://pan.baidu.com/s/1pFo2BkZYPpPFldG-fhbzIA&shfl=sharepset 提取码:xs97 ...

  10. LeetCode——28. Implement strStr()

    题目: class Solution { public: int strStr(string haystack, string needle) { if(needle.empty()){ return ...