デザインパターンについての技術書で有名な「増補改訂版Java言語で学ぶデザインパターン入門」の内容をC#で書いてみることにしました。
こういう書き方もあるんだなくらいに捉えていただけたらと思います。
GitHubにコードを置いています。
参考
DesignPattern【Iterator】GitHub
コード
public interface IAggregate
{
IIterator Iterator();
}
public interface IIterator
{
bool HasNext();
object Next();
}
public class Book
{
readonly string name;
public Book(string name)
{
this.name = name;
}
public string GetName()
{
return name;
}
}
public class BookShelf : IAggregate
{
IList Book> books = new List Book>();
int last = 0;
public BookShelf()
{
}
public Book GetBookAt(int index)
{
return books[index];
}
public void AppendBook(Book book)
{
books.Add(book);
last++;
}
public int GetLength()
{
return last;
}
public IIterator Iterator()
{
return new BookShelfIterator(this);
}
}
public class BookShelfIterator : IIterator
{
private readonly BookShelf bookShelf;
private int index = 0;
public BookShelfIterator(BookShelf bookShelf)
{
this.bookShelf = bookShelf;
}
public bool HasNext()
{
if (index bookShelf.GetLength())
{
return true;
}
else
{
return false;
}
}
public object Next()
{
var book = bookShelf.GetBookAt(index);
index++;
return book;
}
}
class Program
{
static void Main(string[] args)
{
var bookShelf = new BookShelf();
bookShelf.AppendBook(new Book("Around the World in 80 Days"));
bookShelf.AppendBook(new Book("Bible"));
bookShelf.AppendBook(new Book("Cinderella"));
bookShelf.AppendBook(new Book("Dabby-Long-Legs"));
var it = bookShelf.Iterator();
while (it.HasNext())
{
var book = (Book)it.Next();
Console.WriteLine(book.GetName());
}
}
}
実行結果は以下のようになります。
Around the World in 80 Days
Bible
Cinderella
Dabby-Long-Legs
その他のデザインパターンは以下の記事から確認してください。