博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二十四种设计模式:迭代器模式(Iterator Pattern)
阅读量:5766 次
发布时间:2019-06-18

本文共 5365 字,大约阅读时间需要 17 分钟。

迭代器模式(Iterator Pattern)

介绍
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
示例
有一个Message实体类,某聚合对象内的各个元素均为该实体对象,现在要提供一种方法顺序地访问这个聚合对象中的各个元素。

  MessageModel

using System;using System.Collections.Generic;using System.Text;namespace Pattern.Iterator{    ///     /// Message实体类    ///     public class MessageModel    {        ///         /// 构造函数        ///         /// Message内容        /// Message发布时间        public MessageModel(string msg, DateTime pt)        {            this._message = msg;            this._publishTime = pt;        }        private string _message;        ///         /// Message内容        ///         public string Message        {            get { return _message; }            set { _message = value; }        }        private DateTime _publishTime;        ///         /// Message发布时间        ///         public DateTime PublishTime        {            get { return _publishTime; }            set { _publishTime = value; }        }    }}

  ICollection

using System;using System.Collections.Generic;using System.Text;namespace Pattern.Iterator{    ///     /// 集合接口(Aggregate)    ///     public interface ICollection    {        ///         /// 创建迭代器对象        ///         /// 
IIterator CreateIterator(); }}

  Collection

using System;using System.Collections.Generic;using System.Text;namespace Pattern.Iterator{    ///     /// 集合(ConcreteAggregate)    ///     public class Collection : ICollection    {        private List
list = new List
(); ///
/// 创建迭代器对象 /// ///
public IIterator CreateIterator() { return new Iterator(this); } ///
/// 集合内的对象总数 /// public int Count { get { return list.Count; } } ///
/// 索引器 /// ///
index ///
public MessageModel this[int index] { get { return list[index]; } set { list.Add(value); } } }}

  IIterator

using System;using System.Collections.Generic;using System.Text;namespace Pattern.Iterator{    ///     /// 迭代器接口(IIterator)    ///     public interface IIterator    {        ///         /// 第一个对象        ///         /// 
MessageModel First(); /// /// 下一个对象 /// ///
MessageModel Next(); /// /// 当前对象 /// MessageModel CurrentMessageModel { get; } /// /// 是否迭代完毕 /// bool IsDone { get; } }}

  Iterator

using System;using System.Collections.Generic;using System.Text;namespace Pattern.Iterator{    ///     /// 迭代器(Iterator)    ///     public class Iterator : IIterator    {        private Collection _collection;        private int _current = 0;        private int _step = 1;        ///         /// 构造函数        ///         ///         public Iterator(Collection collection)        {            this._collection = collection;        }        ///         /// 第一个对象        ///         /// 
public MessageModel First() { _current = 0; return _collection[_current]; } /// /// 下一个对象 /// ///
public MessageModel Next() { _current += _step; if (!IsDone) { return _collection[_current]; } else { return null; } } /// /// 当前对象 /// public MessageModel CurrentMessageModel { get { return _collection[_current]; } } /// /// 是否迭代完毕 /// public bool IsDone { get { return _current >= _collection.Count ? true : false; } } /// /// 步长 /// public int Step { get { return _step; } set { _step = value; } } }}

  Test

using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using I = Pattern.Iterator;public partial class Iterator : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        I::Collection collection = new I::Collection();        collection[0] = new I::MessageModel("第1条信息", DateTime.Now);        collection[1] = new I::MessageModel("第2条信息", DateTime.Now);        collection[2] = new I::MessageModel("第3条信息", DateTime.Now);        collection[3] = new I::MessageModel("第4条信息", DateTime.Now);        collection[4] = new I::MessageModel("第5条信息", DateTime.Now);        collection[5] = new I::MessageModel("第6条信息", DateTime.Now);        collection[6] = new I::MessageModel("第7条信息", DateTime.Now);        collection[7] = new I::MessageModel("第8条信息", DateTime.Now);        collection[8] = new I::MessageModel("第9条信息", DateTime.Now);        I::Iterator iterator = new I::Iterator(collection);        iterator.Step = 2;        for (I::MessageModel mm = iterator.First(); !iterator.IsDone; mm = iterator.Next())        {            Response.Write(mm.Message);            Response.Write("
"); } }}

  运行结果

  第1条信息
  第3条信息
  第5条信息
  第7条信息
  第9条信息

转载于:https://www.cnblogs.com/taotaodetuer/p/6182432.html

你可能感兴趣的文章
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
Oracle 备份与恢复学习笔记(5_1)
查看>>
Oracle 备份与恢复学习笔记(14)
查看>>
分布式配置中心disconf第一部(基本介绍)
查看>>
Scenario 9-Shared Uplink Set with Active/Active uplink,802.3ad(LACP)-Flex-10
查看>>
UML类图中的六种关系
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
mysql(待整理)
查看>>
看雪论坛502,出现安全宝?
查看>>
使用PullToRefresh实现下拉刷新和上拉加载
查看>>
mysql
查看>>
2012年电信业八大发展趋势
查看>>
Web日志安全分析工具 v2.0发布
查看>>
JS重载
查看>>
python2和python3同安装在Windows上,切换问题
查看>>
php加速工具xcache的安装与使用(基于LNMP环境)
查看>>