デザインパターン入門

Iteratorパターン

一つ一つ数え上げる

どんな場合に使うのか

何かがたくさん集まっているときに,それを順番に指し示していき,全体をスキャンしていく処理を行うためのもの.

ポイント

  • 抽象クラスやインターフェースの使い方がよくわからない人は,AggregateインターフェースやIreratorインターフェースではなく,いきなりConcreteAggregate役やConcreteIterator役の上でプログラミングをしていまいがちです.〜具体的なクラスだけを使うと,クラス間の結合が強くなってしまい,部品として再利用することが難しくなります.〜抽象クラスやインターフェースを使ってプログラミングする,という考え方を頭の隅に置いてください.

サンプルプログラム

// Aggregate.cs
namespace chap01 {
  interface Aggregate {
    Iterator iterator();
  }
}

// Book.cs
namespace chap01 {
  public class Book {
    public string name { get; private set; }
    public Book(string name) {
      this.name = name;
    }
  }
}

// BookShelf.cs
using System.Collections;
namespace chap01 {
  class BookShelf : Aggregate {
    private ArrayList books;
    private int last;

    public BookShelf(int maxsize) {
      books = new ArrayList();
    }
    public Book getBookAt(int index) {
      return (Book)books[index];
    }
    public void appendBook(Book book) {
      books.Add(book);
      last++;
    }
    public int getLength() {
      return last;
    }
    public Iterator iterator() {
      return new BookShelfIterator(this);
    }
  }
}

// BookShelfIterator.cs
namespace chap01 {
  class BookShelfIterator : Iterator {
    private BookShelf bookShelf;
    private int index;
    public BookShelfIterator(BookShelf bookShelf) {
      this.bookShelf = bookShelf;
      this.index = 0;
    }
    public bool hasNext() {
      return index < bookShelf.getLength() ? true : false;
    }
    public object next() {
      return bookShelf.getBookAt(index++);
    }
  }
}

// Iterator.cs
namespace chap01 {
  interface Iterator {
    bool hasNext();
    object next();
  }
}

// Program.cs
using System;
namespace chap01 {
  class Program {
    static void Main(string[] args) {
      BookShelf bookShelf = new BookShelf(4);
      bookShelf.appendBook(new Book("Arround the world in 80 Days"));
      bookShelf.appendBook(new Book("Bible"));
      bookShelf.appendBook(new Book("Cinderella"));
      bookShelf.appendBook(new Book("Daddy-Long-Legs"));
      bookShelf.appendBook(new Book("JAVA言語で学ぶデザインパターン入門"));
      bookShelf.appendBook(new Book("プログラミング作法"));
      bookShelf.appendBook(new Book("プログラミング言語C"));
      bookShelf.appendBook(new Book("はじめてのPerl"));

      Iterator it = bookShelf.iterator();

      while (it.hasNext()) {
        Book book = (Book)it.next();
        Console.WriteLine(book.name);
      }
      Console.ReadKey();
    }
  }
}

デザインパターン入門

このページへのコメント

A4giK5 <a href="http://pgntwhzwxiah.com/">pgntwhzwxiah</a>, [url=http://werfmumqurka.com/]werfmumqurka[/url], [link=http://niyvyysacsfg.com/]niyvyysacsfg[/link], http://rmdlxjoxdngp.com/

0
Posted by iatmkxbc 2013年11月15日(金) 06:40:58 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます