
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
///Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
///add by jzh 2007-04-26
namespace DesignPattern
{
class Node
{
private string name;
public string Name
{
get
{
return name;
}
}
public Node(string s)
{
name = s;
}
}
class NodeCollection
{
private ArrayList list = new ArrayList();
private int nodeMax = 0;
public void AddNode(Node n)
{
list.Add(n);
nodeMax++;
}
public Node GetNode(int i)
{
return ((Node)list[i]);
}
public int NodeMax
{
get
{
return nodeMax;
}
}
}
abstract class Iterator
{
abstract public Node Next();
}
class ReverseIterator : Iterator
{
private NodeCollection nodeCollection;
private int currentIndex;
public ReverseIterator(NodeCollection c)
{
nodeCollection = c;
currentIndex = c.NodeMax - 1; // array index starts at 0!
}
override public Node Next()
{
if (currentIndex == -1)
return null;
else
return (nodeCollection.GetNode(currentIndex--));
}
}
public class Client
{
public static void Main(string[] args)
{
NodeCollection c = new NodeCollection();
c.AddNode(new Node("a"));
c.AddNode(new Node("b"));
c.AddNode(new Node("c"));
ReverseIterator i = new ReverseIterator(c);
Node n;
do
{
n = i.Next();
if (n != null)
Console.WriteLine("{0}", n.Name);
} while (n != null);
Console.ReadLine();
}
}
}