天天看点

极速理解设计模式系列:16.迭代器模式(Iterator Pattern)

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

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

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

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

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

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

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

 类图:

<a target="_blank" href="http://blog.51cto.com/attachment/201204/164847880.jpg"></a>

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

分析:首先建立一个聚合对象,然后在聚合对象中添加新闻的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 &gt;= concretecollect.Count ? null : concretecollect[current]; 

    public override bool IsOver() 

        return current &gt;= 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&lt;News&gt; collectList = new List&lt;News&gt;(); 

    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;} 

本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827026

继续阅读