UML类图:
代码实现:
public interface Iterator<T>
{
T GetCurrentItem();
T First();
T Next();
Boolean IsDone();
}
public interface Aggregate<T>
{
Iterator<T> CreateIterator();
}
public class ConreteAggregate<T> : Aggregate<T>
{
List<T> arr = new List<T>();
public Iterator<T> CreateIterator()
{
return new ConcreteIterator<T>(this);
}
public int Count { get { return arr.Count; } }
public T this[int index]
{
get
{
return arr[index];
}
set
{
arr.Insert(index, value);
}
}
}
public class ConcreteIterator<T> : Iterator<T>
{
ConreteAggregate<T> arr;
int indexer = 0;
public ConcreteIterator(ConreteAggregate<T> arr)
{
this.arr = arr;
}
public T GetCurrentItem()
{
if (indexer < arr.Count)
return arr[indexer];
else
return default(T);
}
public T First()
{
if (arr.Count != 0)
return arr[0];
else
return default(T);
}
public T Next()
{
indexer++;
if (indexer < arr.Count)
return arr[indexer];
else
return default(T);
}
public bool IsDone()
{
return indexer < arr.Count - 1 ? false : true;
}
}
Python代码实现
class Iterator(object):
def GetCurrentItem(self):
raise NotImplementedError("abstract")
def Next(self):
raise NotImplementedError("abstract")
def IsDone(self):
raise NotImplementedError("abstract")
def GetFirst(self):
raise NotImplementedError("abstract")
class ConcreteIterator(Iterator):
__component = None
__index = 0
def __init__(self, component):
self.__component=component
def GetCurrentItem(self):
return self.__component.list[self.__index]
def Next(self):
if not self.IsDone():
self.__index += 1
return self.__component.list[self.__index]
else:
return None
def IsDone(self):
if self.__index == len(self.__component.list) - 1:
return True
else:
return False
def GetFirst(self):
return self.__component.list[0]
class AbstractComponent(object):
def CreateIterator(self):
raise NotImplementedError("abstract")
class Component(AbstractComponent):
__iterator=None
list=[]
def CreateIterator(self):
return ConcreteIterator(self)
if __name__ == "__main__":
list = [1,2,3]
component = Component()
component.list=list
iterator=component.CreateIterator()
print(iterator.GetCurrentItem())
print(iterator.Next())
print(iterator.IsDone())
print(iterator.GetCurrentItem())
print(iterator.Next())
print(iterator.IsDone())
print(iterator.GetFirst())