且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

23种设计模式之迭代器模式(Iterator)

更新时间:2022-03-30 23:05:29

23种设计模式之迭代器模式(Iterator)

迭代器模式是一种对象的行为型模式,提供了一种方法来访问聚合对象,而不用暴露这个对象的内部表示。迭代器模式支持以不同的方式遍历一个聚合对象,复杂的聚合可用多种方法来进行遍历;允许在同一个聚合上可以有多个遍历,每个迭代器保持它自己的遍历状态,因此,可以同时进行多个遍历操作。

优点:

1)支持集合的不同遍历。

2)简化了集合的接口。

使用场景:

1)在不开发集合对象内部表示的前提下,访问集合对象内容。

2)支持集合对象的多重遍历。

3)为遍历集合中的不同结构提供了统一的接口。

23种设计模式之迭代器模式(Iterator)

Iterator 模式

 

public interface Aggregate { Iterator iterator(); }

 

public class Book { public Book() { // } public string GetName() { return "这是一本书"; } }

 

public class BookShelf { private IList<Book> books; public BookShelf(int initialsize) { this.books = new List<Book>(initialsize); } public Book GetBookAt(int index) { return books[index] as Book; } public int GetLength() { return books.Count; } public Iterator iterator() { return new BookShelfIterator(this); } }

 

public class BookShelfIterator : Iterator { private BookShelf bookShelf; private int index; public BookShelfIterator(BookShelf bookShelf) { this.bookShelf = bookShelf; this.index = 0; } public bool HasNext() { if (index < bookShelf.GetLength()) { return true; } else { return false; } } public object Next() { Book book = bookShelf.GetBookAt(index) as Book; index++; return book; } }

 

public interface Iterator { bool HasNext(); Object Next(); }

 

  class Program { static void Main(string[] args) { //迭代器模式 BookShelf bookShelf = new BookShelf(4); Iterator.Iterator it = bookShelf.iterator(); while (it.HasNext()) { Book book = it.Next() as Book; Console.WriteLine("" + book.GetName()); } } }