泡泡

              宠辱不惊-闲看庭前花开花落
                           去留无意-漫观天外云展云舒
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

16)Iterator

Posted on 2007-09-21 14:42  AlanPaoPao  阅读(212)  评论(0)    收藏  举报
    迭代器模式的目的是: 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示
    实例代码:
class Item
{
  
string name;
  
public Item(string name)
  
{
    
this.name = name;
  }

  
public string Name
  
{
    
get return name; }
  }

}

interface IAbstractIterator
{
  Item First();
  Item Next();
  
bool IsDone get; }
  Item CurrentItem 
get; }
}

class Iterator : IAbstractIterator
{
  
private Collection collection;
  
private int current = 0;
  
private int step = 1;
  
public Iterator(Collection collection)
  
{
    
this.collection = collection;
  }

  
public Item First()
  
{
    current 
= 0;
    
return collection[current] as Item;
  }

  
public Item Next()
  
{
    current 
+= step;
    
if (!IsDone)
      
return collection[current] as Item;
    
else
      
return null;
  }

  
public int Step
  
{
    
get return step; }
    
set { step = value; }
  }

  
public Item CurrentItem
  
{
    
get
    
{
      
return collection[current] as Item;
    }

  }

  
public bool IsDone
  
{
    
get
    
{
      
return current >= collection.Count ? true : false;
    }

  }

}

interface IAbstractCollection
{
  Iterator CreateIterator();
}

class Collection : IAbstractCollection
{
  
private ArrayList items = new ArrayList();
  
public Iterator CreateIterator()
  
{
    
return new Iterator(this);
  }

  
public int Count
  
{
    
get return items.Count; }
  }

  
public object this[int index]
  
{
    
get return items[index]; }
    
set { items.Add(value); }
  }

}

class MainApp
{
  
static void Main()
  
{
    Collection collection 
= new Collection();
    collection[
0= new Item("Item 0");
    collection[
1= new Item("Item 1");
    collection[
2= new Item("Item 2");
    collection[
3= new Item("Item 3");
    collection[
4= new Item("Item 4");
    collection[
5= new Item("Item 5");
    collection[
6= new Item("Item 6");
    collection[
7= new Item("Item 7");
    collection[
8= new Item("Item 8");
    Iterator iterator 
= new Iterator(collection);
    iterator.Step 
= 2;
    Console.WriteLine(
"Iterating over collection:");
    
for (Item item = iterator.First();!iterator.IsDone; item = iterator.Next())
    
{
      Console.WriteLine(item.Name);
    }

    Console.Read();
  }

}