デザインパターンとは、システム設計におけるクラスやインターフェースの関係に名前をつけたものです。 GoFの23のパターンが有名です。デザインパターンというのは、どんなパターンなのか、パターンの目的は何かということを覚えることが非常に重要なのですが、これを実際に適用しようとした場合に、いつ適用していいかが見えてこないとお話になりません。

そこで、自分の勉強も兼ねつつ、パターンの実践時における使用場所や、パターンを適用するきっかけを見つけられるようにメモしておきます。

7回目、統一された方法で、集合オブジェクトに順番にアクセスするIteratorパターンのメモです。

Iteratorパターン

Iteratorパターンは、集合オブジェクトに順番にアクセスする方法を提供するパターンです。

Iteratorのクラス図

Javaのクラスライブラリには、すでにIteratorというクラスが提供されています。コレクションフレームワークには、Iteratorパターンがいたるところで適用されています。

このパターンの恩恵を受けるのは、配列を使うときよりもむしろ、集合体を扱うクラスを、自分で作ったときです。自分で作成した集合体クラスにアクセスさせる場合に、それぞれ操作を提供すると思います。が、普通は提供する手段や方法はばらばらになってしまうのが常です。そんな時、このパターンを使うと、いろいろな集合体クラスに、順序良くアクセスさせる手段を統一的な方法で提供できます。

良い例が先ほどの、Javaコレクションフレームワークです。MapやList、Setなど、さまざまな集合オブジェクトへの順次アクセスは、すべて、Iteratorというインターフェースを使って行うことができます。

パターンの適用タイミング

Iteratorパターンは、集合への順次アクセスを統一的に行うことを目的としています。このパターンを実装するのは、独自クラスで集合クラスを作成したときくらいでしょう。

あとは、すでに提供されているIteratorの使い方を学ぶ程度だと思います。Javaでしたらコレクションフレームワークの基本的使い方を、C++でしたら、STL(Standard Template Library)の使い方をそれぞれ学ぶのが、このパターンを理解する近道だと思います。

独自クラスで集合体を作った場合クラスの内部への順次アクセスの統一的手段を提供したい場合これらの場合に、Iteratorパターンの使用を考えてください。

実装サンプルと参考文献

Iteratorパターンの実装方法をもっと詳しく知りたい場合は、下記のサイトにアクセスするのをお勧めします。もしくは、参考書籍を載せておきますので、そちらをお買い求めください。(^^;

  • 日立ソフト(Iteratorパターン) 日立ソフト

  • Skeleton of GOF’s Design Pattern(JavaとC++のサンプルがあります) ITERATORの骸骨

  • TECHSCORE(Iteratorパターン) TECHSCORE

  • デザインパターンのお勧め書籍


  • 独習シリーズのデザインパターン編。デザインパターンを一人でも学べます。

  • Sun Microsystemのお墨付き。GoF以外のパターンも学べます。

  • UMLを使って、オブジェクト指向のいいとこ取りができます。

  • デザインパターンだけではなく、ソフトウェア設計の原則やプラクティスまで学びたい人におすすめ