0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【設計】<第1回>デザインパターンの学習

Posted at

デザインパターンの学習

今回はデザインパターンの学習記録をする。
アウトプットとして書くだけなのできれいにまとまらないと思う。

Iterator

Iteratorパターン

何かがたくさん集まっているときに、それを順番に指し示していき、全体をスキャンしていく処理を行うためのもの。
数え上げの仕組みがAggregateの外に置かれている特徴がある。この特徴によれ、1つのConcreteAggregateに対して複数のConcreteIteratorを作れる。

Aggregateインタフェース

数え上げるものの集合体。
宣言するメソッドはiteratorメソッドのみ。
iteratorメソッドはiteratorを1個作成するためのメソッド。
集合体の数え上げ、スキャンはiteratorメソッドを使ってIteratorインタフェースを実装したクラスのインスタンスを1個作成する。

Iteratorインタフェース

要素の数え上げを行うもの、ループ変数のような役割を果たすもの。
最も単純なものでは、「次の要素」が存在するか調べるメソッドと「次の要素」を得るためのメソッドを宣言する。
次の要素を取得する際は、裏では内部状態を次に進める処理が動いている。

Iteratorパターンの要素

Iterator(反復子)の役

要素を順番にスキャンするインタフェースを定める。次の要素が存在するかどうかを得るメソッド、次の要素を得るメソッドを定義する。

ConcreteIterator(具体的な反復子)の役

Iterator役が定めたインタフェースを実装する役。スキャンするために必要な情報ももっておく必要がある。

Aggregate(集合体)の役

Iterator役を作りだすインタフェースを定める。スキャンしてくれる人を作り出す。

ConcreteAggregate(具体的な集合体)の役

Aggregate役が定めたインタフェースを実装する役。ConcreteIterator役を作り出す。

なぜIteratorを使うのか?

実際の実装とは切り離して数え上げができるから。実装したものに依存しない。

注意点

AggegateとItteratorは依存している。
具体的なクラスだけを使うとクラス間の結合が強くなる。
「次」メソッドは現在の位置を返しつつ次の位置に進める。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?