博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
极速理解设计模式系列:16.迭代器模式(Iterator Pattern)
阅读量:6161 次
发布时间:2019-06-21

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

五个角色:迭代器(Iterator)、具体迭代器(ConcreteIterator)、聚合(Aggregate)、具体聚合(ConcreteAggregate)、客户端(Client) 

        迭代器(Iterator):定义遍历和访问元素的接口

        具体迭代器(ConcreteIterator):实现迭代器接口并且跟踪聚合对象当前位置

        聚合(Aggregate):定义一个迭代器对象接口

        具体聚合(ConcreteAggregate):实现迭代器对象,并且返回具体迭代器实例

        客户端(Client):调用迭代器对聚合对象进行遍历

实现思路:向具体聚合对象添加元素,然后调用迭代器遍历聚合对象

 类图:

 

应用场景:需要遍历新闻名称。

分析:首先建立一个聚合对象,然后在聚合对象中添加新闻的List,编写迭代器对新闻进行遍历即可。

        下面我们在控制台程序去演示一下如何使用Iterator Pattern:

        一、迭代器(Iterator):

//迭代器(Iterator)     abstract class Iterator {
public abstract News First(); public abstract News Next(); public abstract bool IsOver(); public abstract News Current(); }

        二、具体迭代器(ConcreteIterator):

//具体迭代器(ConcreteIterator)     class ConcreteIterator:Iterator {
public ConcreteCollect concretecollect; int current = 0; public ConcreteIterator(ConcreteCollect collect) {
concretecollect = collect; } public override News First() {
return concretecollect[1]; } public override News Next() {
current++; return current >= concretecollect.Count ? null : concretecollect[current]; } public override bool IsOver() {
return current >= concretecollect.Count ? true : false; } public override News Current() {
return concretecollect[current]; } }

        三、聚合(Aggregate):

//聚合(Aggregate)     abstract class Collect {
public abstract Iterator CreateIterator(); }

        四、具体聚合(ConcreteAggregate):

//具体聚合(ConcreteAggregate)     class ConcreteCollect : Collect {
private List
collectList = new List
(); public override Iterator CreateIterator() {
return new ConcreteIterator(this); } public News this[int index] {
get { return collectList[index]; } set { collectList.Insert(index,value); } } public int Count { get { return collectList.Count; } } }

        五、客户端(Client):

class Program {
static void Main(string[] args) {
ConcreteCollect collect = new ConcreteCollect(); collect[0] = new News("今天的第一个新闻"); collect[1] = new News("今天的第二个新闻"); collect[2] = new News("今天的第三个新闻"); collect[3] = new News("今天的第四个新闻"); collect[4] = new News("今天的第五个新闻"); Iterator iterator = new ConcreteIterator(collect); while (!iterator.IsOver()) {
Console.WriteLine("这是:" + iterator.Current().Name); iterator.Next(); } Console.ReadLine(); } }

          元素:

class News {
public News(string name) {
this.Name = name; } public string Name{
get;set;} }

        如需源码请点击  下载。

本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/10/18/2213110.html,如需转载请自行联系原作者

你可能感兴趣的文章
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>
pip安装Mysql-python报错EnvironmentError: mysql_config not found
查看>>
http协议组成(请求状态码)
查看>>
怎样成为一个高手观后感
查看>>
[转]VC预处理指令与宏定义的妙用
查看>>
MySql操作
查看>>
python 解析 XML文件
查看>>
MySQL 文件导入出错
查看>>
java相关
查看>>
由一个异常开始思考springmvc参数解析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>
SQL Server编程系列(1):SMO介绍
查看>>
在VMware网络测试“专用VLAN”功能
查看>>
使用Formik轻松开发更高质量的React表单(三)<Formik />解析
查看>>
也问腾讯:你把用户放在什么位置?
查看>>
CSS Sprites 样式生成工具(bg2css)
查看>>
[转]如何重构代码--重构计划
查看>>
类中如何对list泛型做访问器??
查看>>