デザインパターン Iterator:1ã¤ãšã¤æ•°ãˆã‚‹
目次
概è¦
é…列系データã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã™ã‚‹ãƒ‡ã‚¶ã‚¤ãƒ³ãƒ‘ターン。
hasNext()ã¨next()メソッドã ã‘を実装ã—ã€
ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã‚’è¦‹ã›ãªã„(index番å·ç‰ã‚’å¼•æ•°ã«æ¸¡ã•ãªã„)。
é…列ã«ãŠã‘ã‚‹indexã®é–‹å§‹å€¤ã‚„終了値ã®èªè˜ã®é•ã„ã«ã‚ˆã‚‹ãƒŸã‚¹ã‚’防ã’る。
クラス図
集約:別クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’メンãƒãƒ¼ã«æŒã¤äº‹ã€‚
「オブジェクト指å‘: UML(クラス図)/集約ã€å‚ç…§
コード
å復åインターフェイス(Iterator)
public interface Iterator {
 public abstract Boolean hasNext();
 public abstract Book next();
}
集åˆä½“インターフェイス(Aggregate)
 public Iterator iterator();
}
å復åクラス(BookShelfIterator)
 private BookShelf bookShelf_;
 private int index_;
 public BookShelfIterator(BookShelf bookShelf){
  this.bookShelf_ = bookShelf;
  this.index_ = 0;
 }
 public Boolean hasNext(){
  if (this.index_ < this.bookShelf_.getLength()){
   return true;
  }else{
   return false;
  }
 }
 public Book next(){
  Book book = this.bookShelf_.getBookAt(this.index_);
  this.index_ ++;
  return book;
 }
}
集åˆä½“クラス(BookShelf)
 private Book[] books_;
 private int last_;
 public BookShelf(int maxSize){
  this.books_ = new Book[maxSize];
 }
 public Book getBookAt(int index){
  return this.books_[index];
 }
 public void appendBook(Book book){
  this.books_[this.last_] = book;
 }
 public int getLength(){
  return this.last_;
 }
 public Iterator iterator(){
  return new BookShelfIterator(this);
 }
}
集åˆä½“ã§æ‰±ã†è¦ç´ (Book)
 private String name_;
 public Book(String name){
  this.name_ = name;
 }
 public String getName(){
  return this.name_;
 }
}
イテレータã®åˆ©ç”¨
import myIterator.Book;
import myIterator.BookShelf;
import myIterator.Iterator;
public class MyClass {
 public static void main(String[] args) {
  Book book1 = new Book("C#");
  Book book2 = new Book("VB.NET");
  Book book3 = new Book("JAVA");
  Book book4 = new Book("JavaScript");
  Book book5 = new Book("Perl");
  BookShelf bookShelf = new BookShelf(5);
  bookShelf.appendBook(book1);
  bookShelf.appendBook(book2~5);
  Iterator it = bookShelf.iterator();
  if ( it.hasNext() ){
   Book book = it.next();
   System.out.println(book.getName());
   ⇒ C#, VB.NET, JAVA, JavaScript, Perl
  }
  ※ ↓ ã§ã‚‚åŒã˜å‹•作をã™ã‚‹ã€‚
  ã—ã‹ã—↑ ã¯BookShelfIteratorãŒã‚«ãƒ—セル化ã•れã¦ã„る事ã§ã€
  よりクラス間ã®çµåˆãŒå¼±ãã€æ±Žç”¨æ€§ãŒé«˜ããªã£ã¦ã„る。
  BookShelfIterator bookShelfIterator(bookShelf);
  if ( bookShelfIterator.hasNext() ){
   Book book = bookShelfIterator.next();
   System.out.println(book.getName());
  }
 }
}