zoukankan      html  css  js  c++  java
  • 极速理解设计模式系列:16.迭代器模式(Iterator Pattern)

    五个角色:迭代器(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<News> collectList = new List<News>();

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

            如需源码请点击 IteratorPattern.rar 下载。

  • 相关阅读:
    SQL SERVER 2005 行转列
    为什么jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON
    Silverlight 布局控件
    python socket connection
    linux下缓存的查看/修改
    openstackflat 网络问题
    Fail to start neutronserver
    copy module
    python ConfigParser
    itertools 介绍
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2213110.html
Copyright © 2011-2022 走看看