「JAVA言語で学ぶデザインパターン入門」をC#で書いてみた【Iteratorパターン】

デザインパターンについての技術書で有名な「増補改訂版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

その他のデザインパターンは以下の記事から確認してください。

「JAVA言語で学ぶデザインパターン入門」をC#で書いてみた【一覧】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA