52333
プログラミング初心者でJavaでIteratorについて学んだのですが、

・Iteratorには大まかに二つ役割があって、それはIteratorクラスとAggregateクラスの二つなのですが、実際にJavaで提供されているAPIはIteratorがjava.util.Iteratorクラス(Enumerationというのもありました)、AggregateがArrayListやMap、Setなどのことだと考えていいのですか？

・デザインパターンの本を読んでいるとMainクラスを作る人とそれ以外のクラス(デザインパターンで作るクラス群)を作る人は別の人だと考えていいのですか？(つまり前者は仕様を読んでAPIを利用する側)

いまいち理解が曖昧で確証が持てなくてもやもやしています。  
どなたか御回答お願いします。
CC BY-SA 4.0
2019-01-25T11:31:54.040
52319
2019-01-26T19:45:10.670
2019-01-26T19:45:10.670
19110
28320
question
java アルゴリズム デザインパターン
デザインパターンのIteratorについて
GoFデザインパターンによる「[Iteratorパターン](https://ja.wikipedia.org/wiki/Iterator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3)」と、Java標準ライブラリが提供する「[`Iterator`インタフェース](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Iterator.html)」とを区別して説明します。

  * Iteratorパターン：「データ集合の要素走査」を目的としたクラス設計構造に名前をつけたもの。
  * Iteratorインタフェース：Java言語でIteratorパターンを実現する際に利用するAPI。

* * *

>
> Iteratorには大まかに二つ役割があって、それはIteratorクラスとAggregateクラスの二つなのですが、実際にJavaで提供されているAPIはIteratorがjava.util.Iteratorクラス(Enumerationというのもありました)、AggregateがArrayListやMap、Setなどのことだと考えていいのですか？

概ね正しい解釈と思います。より正確に表現するならば：

  * Iteratorパターンはインタフェースを規定する「(抽象)Iteratorクラス」「(抽象)Aggregateクラス」、それらを実装する「ConcreteIteratorクラス」「ConcreteAggregateクラス」で記述される。
  * Java言語の[`java.util.Iterator`インタフェース](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Iterator.html)は、Iteratorパターンの「(抽象)Iteratorクラス」に対応する。
  * Java言語の[`java.util.Collection`インタフェース](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Collection.html)は、Iteratorパターンの「(抽象)Aggregateクラス」に対応する。
  * Java言語の`ArrayList`, `Map`, `Set`等は、Iteratorパターンの「ConcreteAggregateクラス」に対応する。

* * *

>
> デザインパターンの本を読んでいるとMainクラスを作る人とそれ以外のクラス(デザインパターンで作るクラス群)を作る人は別の人だと考えていいのですか？(つまり前者は仕様を読んでAPIを利用する側)

どちらのケースもありえます。デザインパターンはソフトウェアの「設計(Design)を類型化したもの」に過ぎません。あるデザインパターンに従ったクラス設計を、第三者が行ってあなたがそれを利用するケースもあれば、あなた自身が記述するクラス設計がデザインパターンに従うこともあります。
CC BY-SA 4.0
2019-01-26T04:33:57.420
52333
2019-01-26T04:33:57.420
49
52319
answer