乐在在那之中设计形式(C#) – 迭代器形式(Iterator Pattern)

[索引页] [源码下载]

乐在其中设计方式(C#) – 迭代器方式(Iterator 帕特tern)

作者:webabcd

介绍
提供一种格局顺序访问二个集合对象中逐一要素,而又不需揭发该对象的里边表示。

示例
有一个Message实体类,某聚合对象内的次第要素均为该实体对象,未来要提供一种情势顺序地访问这几个聚合对象中的各样要素。
图片 1

MessageModel

图片 2using System;
图片 3using System.Collections.Generic;
图片 4using System.Text;
图片 5
图片 6namespace Pattern.Iterator
图片 7图片 8图片 9{
图片 10图片 11    /**//// <summary>
图片 12    /// Message实体类
图片 13    /// </summary>
图片 14    public class MessageModel
图片 15图片 16    图片 17{
图片 18图片 19        /**//// <summary>
图片 20        /// 构造函数
图片 21        /// </summary>
图片 22        /// <param name=”msg”>Message内容</param>
图片 23        /// <param name=”pt”>Message公布时间</param>
图片 24        public MessageModel(string msg, DateTime pt)
图片 25图片 26        图片 27{
图片 28            this._message = msg;
图片 29            this._publishTime = pt;
图片 30        }
图片 31
图片 32        private string _message;
图片 33图片 34        /**//// <summary>
图片 35        /// Message内容
图片 36        /// </summary>
图片 37        public string Message
图片 38图片 39        图片 40{
图片 41图片 42            get 图片 43{ return _message; }
图片 44图片 45            set 图片 46{ _message = value; }
图片 47        }
图片 48
图片 49        private DateTime _publishTime;
图片 50图片 51        /**//// <summary>
图片 52        /// Message发表时间
图片 53        /// </summary>
图片 54        public DateTime PublishTime
图片 55图片 56        图片 57{
图片 58图片 59            get 图片 60{ return _publishTime; }
图片 61图片 62            set 图片 63{ _publishTime = value; }
图片 64        }
图片 65    }
图片 66}
图片 67

ICollection

图片 68using System;
图片 69using System.Collections.Generic;
图片 70using System.Text;
图片 71
图片 72namespace Pattern.Iterator
图片 73图片 74图片 75{
图片 76图片 77    /**//// <summary>
图片 78    /// 集合接口(Aggregate)
图片 79    /// </summary>
图片 80    public interface ICollection
图片 81图片 82    图片 83{
图片 84图片 85        /**//// <summary>
图片 86        /// 创设迭代器对象
图片 87        /// </summary>
图片 88        /// <returns></returns>
图片 89        IIterator CreateIterator();
图片 90    }
图片 91}
图片 92

Collection

图片 93using System;
图片 94using System.Collections.Generic;
图片 95using System.Text;
图片 96
图片 97namespace Pattern.Iterator
图片 98图片 99图片 100{
图片 101图片 102    /**//// <summary>
图片 103    /// 集合(ConcreteAggregate)
图片 104    /// </summary>
图片 105    public class Collection : ICollection
图片 106图片 107    图片 108{
图片 109        private List<MessageModel> list = new List<MessageModel>();
图片 110
图片 111图片 112        /**//// <summary>
图片 113        /// 创设迭代器对象
图片 114        /// </summary>
图片 115        /// <returns></returns>
图片 116        public IIterator CreateIterator()
图片 117图片 118        图片 119{
图片 120            return new Iterator(this);
图片 121        }
图片 122
图片 123图片 124        /**//// <summary>
图片 125        /// 集合内的靶子总数
图片 126        /// </summary>
图片 127        public int Count
图片 128图片 129        图片 130{
图片 131图片 132            get 图片 133{ return list.Count; }
图片 134        }
图片 135
图片 136图片 137        /**//// <summary>
图片 138        /// 索引器
图片 139        /// </summary>
图片 140        /// <param name=”index”>index</param>
图片 141        /// <returns></returns>
图片 142        public MessageModel this[int index]
图片 143图片 144        图片 145{
图片 146图片 147            get 图片 148{ return list[index]; }
图片 149图片 150            set 图片 151{ list.Add(value); }
图片 152        }
图片 153
图片 154    }
图片 155}
图片 156

IIterator

图片 157using System;
图片 158using System.Collections.Generic;
图片 159using System.Text;
图片 160
图片 161namespace Pattern.Iterator
图片 162图片 163图片 164{
图片 165图片 166    /**//// <summary>
图片 167    /// 迭代器接口(IIterator)
图片 168    /// </summary>
图片 169    public interface IIterator
图片 170图片 171    图片 172{
图片 173图片 174        /**//// <summary>
图片 175        /// 第3个目的
图片 176        /// </summary>
图片 177        /// <returns></returns>
图片 178        MessageModel First();
图片 179
图片 180图片 181        /**//// <summary>
图片 182        /// 下二个对象
图片 183        /// </summary>
图片 184        /// <returns></returns>
图片 185        MessageModel Next();
图片 186
图片 187图片 188        /**//// <summary>
图片 189        /// 当前指标
图片 190        /// </summary>
图片 191图片 192        MessageModel CurrentMessageModel 图片 193{ get; }
图片 194
图片 195图片 196        /**//// <summary>
图片 197        /// 是不是迭代完成
图片 198        /// </summary>
图片 199图片 200        bool IsDone 图片 201{ get; }
图片 202    }
图片 203}
图片 204

Iterator

图片 205using System;
图片 206using System.Collections.Generic;
图片 207using System.Text;
图片 208
图片 209namespace Pattern.Iterator
图片 210图片 211图片 212{
图片 213图片 214    /**//// <summary>
图片 215    /// 迭代器(Iterator)
图片 216    /// </summary>
图片 217    public class Iterator : IIterator
图片 218图片 219    图片 220{
图片 221        private Collection _collection;
图片 222        private int _current = 0;
图片 223        private int _step = 1;
图片 224
图片 225图片 226        /**//// <summary>
图片 227        /// 构造函数
图片 228        /// </summary>
图片 229        /// <param name=”collection”></param>
图片 230        public Iterator(Collection collection)
图片 231图片 232        图片 233{
图片 234            this._collection = collection;
图片 235        }
图片 236
图片 237图片 238        /**//// <summary>
图片 239        /// 第多少个目的
图片 240        /// </summary>
图片 241        /// <returns></returns>
图片 242        public MessageModel First()
图片 243图片 244        图片 245{
图片 246            _current = 0;
图片 247            return _collection[_current];
图片 248        }
图片 249
图片 250图片 251        /**//// <summary>
图片 252        /// 下2个目的
图片 253        /// </summary>
图片 254        /// <returns></returns>
图片 255        public MessageModel Next()
图片 256图片 257        图片 258{
图片 259            _current += _step;
图片 260
图片 261            if (!IsDone)
图片 262图片 263            图片 264{
图片 265                return _collection[_current];
图片 266            }
图片 267            else
图片 268图片 269            图片 270{
图片 271                return null;
图片 272            }
图片 273        }
图片 274
图片 275图片 276        /**//// <summary>
图片 277        /// 当前目的
图片 278        /// </summary>
图片 279        public MessageModel CurrentMessageModel
图片 280图片 281        图片 282{
图片 283图片 284            get 图片 285{ return _collection[_current]; }
图片 286        }
图片 287
图片 288图片 289        /**//// <summary>
图片 290        /// 是或不是迭代完毕
图片 291        /// </summary>
图片 292        public bool IsDone
图片 293图片 294        图片 295{
图片 296图片 297            get 图片 298{ return _current >= _collection.Count ? true : false; }
图片 299        }
图片 300
图片 301图片 302        /**//// <summary>
图片 303        /// 步长
图片 304        /// </summary>
图片 305        public int Step
图片 306图片 307        图片 308{
图片 309图片 310            get 图片 311{ return _step; }
图片 312图片 313            set 图片 314{ _step = value; }
图片 315        }
图片 316    }
图片 317}
图片 318

Test

图片 319using System;
图片 320using System.Data;
图片 321using System.Configuration;
图片 322using System.Collections;
图片 323using System.Web;
图片 324using System.Web.Security;
图片 325using System.Web.UI;
图片 326using System.Web.UI.WebControls;
图片 327using System.Web.UI.WebControls.WebParts;
图片 328using System.Web.UI.HtmlControls;
图片 329
图片 330using I = Pattern.Iterator;
图片 331
图片 332public partial class Iterator : System.Web.UI.Page
图片 333图片 334图片 335{
图片 336    protected void Page_Load(object sender, EventArgs e)
图片 337图片 338    图片 339{
图片 340        I::Collection collection = new I::Collection();
图片 341
图片 342        collection[0] = new I::MessageModel(“第1条信息”, DateTime.Now);
图片 343        collection[1] = new I::MessageModel(“第2条信息”, DateTime.Now);
图片 344        collection[2] = new I::MessageModel(“第3条信息”, DateTime.Now);
图片 345        collection[3] = new I::MessageModel(“第4条信息”, DateTime.Now);
图片 346        collection[4] = new I::MessageModel(“第5条信息”, DateTime.Now);
图片 347        collection[5] = new I::MessageModel(“第6条信息”, DateTime.Now);
图片 348        collection[6] = new I::MessageModel(“第7条信息”, DateTime.Now);
图片 349        collection[7] = new I::MessageModel(“第8条信息”, DateTime.Now);
图片 350        collection[8] = new I::MessageModel(“第9条信息”, DateTime.Now);
图片 351
图片 352        I::Iterator iterator = new I::Iterator(collection);
图片 353
图片 354        iterator.Step = 2;
图片 355
图片 356        for (I::MessageModel mm = iterator.First(); !iterator.IsDone; mm = iterator.Next())
图片 357图片 358        图片 359{
图片 360            Response.Write(mm.Message);
图片 361            Response.Write(“<br />”);
图片 362        }
图片 363    }
图片 364}
图片 365

运作结果
第1条信息
第3条信息
第5条信息
第7条信息
第9条信息

参考
http://www.dofactory.com/Patterns/PatternIterator.aspx

OK
[源码下载]

相关文章