using System;
using System.Text;
using System.Collections.Generic;
using System.Collections;
namespace 迭代模式
{

/*
* 迭代模式意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
*
* 迭代模式实现要点:1、迭代抽象:访问一个聚合对象的内容而无需暴露它的内部表示。
* 2、迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行
* 3、迭代器的健壮性考虑:遍历的同时更改迭代器所在的集合结构,有可能导致问题。
*
* 迭代模式优点:1、访问一个聚合对象的内容而无需暴露它的内部表示。
* 2、支持对聚合对象的多种遍历。
* 3、遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。
*
* 迭代模式缺点:1、通过增加具体的接口,有可能增加代码的阅读难度
*
* 迭代模式适用场景:1、
*/

///<summary>
/// 聚集抽象类 并通过CreateIterator()方法创建一个迭代对象。
///</summary>
publicabstractclass Aggregate
{
publicabstract Iterator CreateIterator();
}
///<summary>
/// 抽象迭代方法
///</summary>
publicabstractclass Iterator
{
publicabstractobject First();

publicabstractobject Next();

publicabstractbool IsDone();

publicabstractobject CurrentItem();
}

///<summary>
/// 具体实现迭代类
///</summary>
publicclass ConcreteAggregate : Aggregate
{
private ArrayList _items=new ArrayList();


publicint Count
{
get { returnthis._items.Count; }
}
publicobjectthis[int index]
{
get { returnthis._items[index]; }
set { this._items[index] = value; }
}

///<summary>
/// 创建迭对象
///</summary>
///<returns></returns>
publicoverride Iterator CreateIterator()
{
returnnew ConcreteIterator(this);
}
}

///<summary>
/// 具体迭代类
///</summary>
publicclass ConcreteIterator : Iterator
{
private ConcreteAggregate aggregate;
privateint _current =0;

///<summary>
/// 将聚合类和具体迭代关联
///</summary>
///<param name="aggregate"></param>
public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
}

//具体迭代方法
publicoverrideobject First()
{
return aggregate[0];
}

publicoverrideobject Next()
{
object ret =null;
if (_current<aggregate.Count-1)
{
ret
= aggregate[_current++];
}
return ret;
}

publicoverridebool IsDone()
{
return _current >= aggregate.Count;
}

publicoverrideobject CurrentItem()
{
return aggregate[_current];
}

}

publicclass AppCient
{
publicstaticvoid Main(string[] args)
{
ConcreteAggregate ca
=new ConcreteAggregate();
ca[
0] ="Item0";
ca[
1] ="Item1";
ca[
2] ="Item2";
ca[
3] ="Item3";
ConcreteIterator ci
=new ConcreteIterator(ca);

object current = ci.First();
//开始迭代

while (current!=null)
{
Console.Write(current);
current
= ci.Next();

}
}

}
}
            ConcreteIterator ci=new ConcreteIterator(ca);

            object current = ci.First();
            //开始迭代

            while (current!=null)
            {
                Console.Write(current);
                current = ci.Next();
               
            }
        }
       
    }
}
using System;
using System.Text;
using System.Collections.Generic;
using System.Collections;
namespace 迭代模式
{

/*
* 迭代模式意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
*
* 迭代模式实现要点:1、迭代抽象:访问一个聚合对象的内容而无需暴露它的内部表示。
* 2、迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行
* 3、迭代器的健壮性考虑:遍历的同时更改迭代器所在的集合结构,有可能导致问题。
*
* 迭代模式优点:1、访问一个聚合对象的内容而无需暴露它的内部表示。
* 2、支持对聚合对象的多种遍历。
* 3、遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。
*
* 迭代模式缺点:1、通过增加具体的接口,有可能增加代码的阅读难度
*
* 迭代模式适用场景:1、
*/

///<summary>
/// 聚集抽象类 并通过CreateIterator()方法创建一个迭代对象。
///</summary>
publicabstractclass Aggregate
{
publicabstract Iterator CreateIterator();
}
///<summary>
/// 抽象迭代方法
///</summary>
publicabstractclass Iterator
{
publicabstractobject First();

publicabstractobject Next();

publicabstractbool IsDone();

publicabstractobject CurrentItem();
}

///<summary>
/// 具体实现迭代类
///</summary>
publicclass ConcreteAggregate : Aggregate
{
private ArrayList _items=new ArrayList();


publicint Count
{
get { returnthis._items.Count; }
}
publicobjectthis[int index]
{
get { returnthis._items[index]; }
set { this._items[index] = value; }
}

///<summary>
/// 创建迭对象
///</summary>
///<returns></returns>
publicoverride Iterator CreateIterator()
{
returnnew ConcreteIterator(this);
}
}

///<summary>
/// 具体迭代类
///</summary>
publicclass ConcreteIterator : Iterator
{
private ConcreteAggregate aggregate;
privateint _current =0;

///<summary>
/// 将聚合类和具体迭代关联
///</summary>
///<param name="aggregate"></param>
public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
}

//具体迭代方法
publicoverrideobject First()
{
return aggregate[0];
}

publicoverrideobject Next()
{
object ret =null;
if (_current<aggregate.Count-1)
{
ret
= aggregate[_current++];
}
return ret;
}

publicoverridebool IsDone()
{
return _current >= aggregate.Count;
}

publicoverrideobject CurrentItem()
{
return aggregate[_current];
}

}

publicclass AppCient
{
publicstaticvoid Main(string[] args)
{
ConcreteAggregate ca
=new ConcreteAggregate();
ca[
0] ="Item0";
ca[
1] ="Item1";
ca[
2] ="Item2";
ca[
3] ="Item3";
ConcreteIterator ci
=new ConcreteIterator(ca);

object current = ci.First();
//开始迭代

while (current!=null)
{
Console.Write(current);
current
= ci.Next();

}
}

}
}
using System;
using System.Text;
using System.Collections.Generic;
using System.Collections;
namespace 迭代模式
{

/*
* 迭代模式意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
*
* 迭代模式实现要点:1、迭代抽象:访问一个聚合对象的内容而无需暴露它的内部表示。
* 2、迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行
* 3、迭代器的健壮性考虑:遍历的同时更改迭代器所在的集合结构,有可能导致问题。
*
* 迭代模式优点:1、访问一个聚合对象的内容而无需暴露它的内部表示。
* 2、支持对聚合对象的多种遍历。
* 3、遍历不同的聚合结构提供一个统一的接口(即, 支持多态迭代)。
*
* 迭代模式缺点:1、通过增加具体的接口,有可能增加代码的阅读难度
*
* 迭代模式适用场景:1、
*/

///<summary>
/// 聚集抽象类 并通过CreateIterator()方法创建一个迭代对象。
///</summary>
publicabstractclass Aggregate
{
publicabstract Iterator CreateIterator();
}
///<summary>
/// 抽象迭代方法
///</summary>
publicabstractclass Iterator
{
publicabstractobject First();

publicabstractobject Next();

publicabstractbool IsDone();

publicabstractobject CurrentItem();
}

///<summary>
/// 具体实现迭代类
///</summary>
publicclass ConcreteAggregate : Aggregate
{
private ArrayList _items=new ArrayList();


publicint Count
{
get { returnthis._items.Count; }
}
publicobjectthis[int index]
{
get { returnthis._items[index]; }
set { this._items[index] = value; }
}

///<summary>
/// 创建迭对象
///</summary>
///<returns></returns>
publicoverride Iterator CreateIterator()
{
returnnew ConcreteIterator(this);
}
}

///<summary>
/// 具体迭代类
///</summary>
publicclass ConcreteIterator : Iterator
{
private ConcreteAggregate aggregate;
privateint _current =0;

///<summary>
/// 将聚合类和具体迭代关联
///</summary>
///<param name="aggregate"></param>
public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
}

//具体迭代方法
publicoverrideobject First()
{
return aggregate[0];
}

publicoverrideobject Next()
{
object ret =null;
if (_current<aggregate.Count-1)
{
ret
= aggregate[_current++];
}
return ret;
}

publicoverridebool IsDone()
{
return _current >= aggregate.Count;
}

publicoverrideobject CurrentItem()
{
return aggregate[_current];
}

}

publicclass AppCient
{
publicstaticvoid Main(string[] args)
{
ConcreteAggregate ca
=new ConcreteAggregate();
ca[
0] ="Item0";
ca[
1] ="Item1";
ca[
2] ="Item2";
ca[
3] ="Item3";
ConcreteIterator ci
=new ConcreteIterator(ca);

object current = ci.First();
//开始迭代

while (current!=null)
{
Console.Write(current);
current
= ci.Next();

}
}

}
}

相关文章:

  • 2021-07-21
  • 2021-07-29
  • 2021-11-29
  • 2021-05-26
  • 2021-09-06
  • 2022-12-23
  • 2021-09-01
  • 2022-12-23
猜你喜欢
  • 2022-01-01
  • 2022-01-18
  • 2022-12-23
  • 2021-10-23
  • 2021-10-06
  • 2021-04-27
  • 2021-08-02
相关资源
相似解决方案