LoginSignup
16
14

More than 5 years have passed since last update.

デザインパターン #1 〜Iterator〜

Posted at

デザインパターン #1 〜Iterator〜

本当に今更ですがデザインパターンを紹介していきます。
記念すべき第一回目は Iteratorパターン です。

概要

「Iterate」という英単語は、何かを「繰返す」という意味です。
「Iterator パターン」とは, ある集合体の要素一つ一つに, 順次アクセスする方法を提供するパターンです。

サンプルコード

では簡単なサンプルをJavaで作っていきます。

Aggregate.java
public interface Aggregate {
    public abstract Iterator iterator();
}
Book.java
public class Book {
    private String name = null;
    public Book(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}
Iterator.java
public interface Iterator {
    public abstract boolean hasNext();
    public abstract Object next();
}
BookShelf.java
import java.util.ArrayList;
import java.util.List;

public class BookShelf implements Aggregate {
    private List<Book> books = new ArrayList<Book>();

    public Book getBookAt(int index) {
        return books.get(index);
    }

    public void appendBook(Book book) {
        this.books.add(book);
    }

    public int size() {
        return this.books.size();
    }

    @Override
    public Iterator iterator() {
        return new BookShelfIterator(this);
    }
}
BookShelfIterator.java
public class BookShelfIterator implements Iterator {

    private BookShelf bookShlef;
    private int index;

    public BookShelfIterator(BookShelf bookShelf) {
        this.bookShlef = bookShelf;
        this.index = 0;

    }
    @Override
    public boolean hasNext() {
        if (index < this.bookShlef.size()) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public Object next() {
        Book book = bookShlef.getBookAt(this.index);
        this.index++;
        return book;
    }

}
Main.java
public class Main {
    public static void main(String[] args) {
        BookShelf bookShelf = new BookShelf();
        bookShelf.appendBook(new Book("80 days"));
        bookShelf.appendBook(new Book("81 days"));
        bookShelf.appendBook(new Book("82 days"));
        bookShelf.appendBook(new Book("83 days"));

        Iterator it = bookShelf.iterator();

        while(it.hasNext()) {
            Book book = (Book)it.next();
            System.out.println(book.getName());
        }
    }
}

結果

80 days
81 days
82 days
83 days

Process finished with exit code 0
16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14