设计模式之迭代器模式

10/24/2012 8:44:45 AM

 名称:迭代器模式

 意图:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

 适用环境:

     1、访问一个取合对象的内容而无需暴露它的内部表示。

     2、支持对聚合对象的多种遍历。

     3、为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。

     

    abstractclassAggregate

    {

        publicabstractIteratorCreateIterator();

    }

    classConcreteAggregate: Aggregate

    {

        privateArrayList_items = newArrayList();

        publicoverrideIteratorCreateIterator()

        {

            returnnewConcreteIterator(this);

        }

        publicintCount

        {

            get{ return_items.Count; }

        }

        publicobjectthis[intindex]

        {

            get{ return_items[index]; }

            set{ _items.Insert(index, value); }

        }

    }

    abstractclassIterator

    {

        publicabstractobjectFirst();

        publicabstractobjectNext();

        publicabstractboolIsDone();

        publicabstractobjectCurrentItem();

    }

    classConcreteIterator: Iterator

    {

        privateConcreteAggregate_aggregate;

        privateint_current = 0;

 

        publicConcreteIterator(ConcreteAggregateaggregate)

        {

            this._aggregate = aggregate;

        }

        publicoverrideobjectFirst()

        {

            return_aggregate[0];

        }

        publicoverrideobjectNext()

        {

            objectret = null;

            if(_current < _aggregate.Count - 1)

            {

                ret = _aggregate[++_current];

            }

            returnret;

        }

        publicoverrideobjectCurrentItem()

        {

            return_current >= _aggregate.Count;

        }

        publicoverrideboolIsDone()

        {

            return_current >= _aggregate.Count;

        }

}

调用:

ConcreteAggregatea = newConcreteAggregate();

            a[0] = "Item A";

            a[1] = "Item B";

            a[2] = "Item C";

            a[3] = "Item D";

 

            ConcreteIteratori = newConcreteIterator(a);

            Console.WriteLine("Iterating over collection:");

 

            objectitem = i.First();

            while(item != null)

            {

                Console.WriteLine(item);

                item = i.Next();

            }

 

输出:

Iterating over collection:

Item A

Item B

Item C

Item D