2013-03-12 9 views
5

イテレーターは、コレクションについて繰り返し知っている必要があります。 コレクションも、そのイテレータについて知っていますか?依存関係は一方向か両方向か?コレクションに特定のイテレーター実装に関する知識がある場合、同じコレクションに対して異なるイテレーター戦略を持つことは不可能かもしれません。これは私の考えです。私は正しいのですか、それとも完全に間違っていましたか?コレクションとイテレータの間に循環依存関係はありますか?

GoF本はイテレータパターンのため、この図があります:私はそれが循環依存関係を暗示だと思う

enter image description here

を。私はListからLisIteratorSkipListからSkipListIteratorまでの点線についてはわかりません。

P.S:私は毎日Javaを扱いますが、特定の言語に特有のものよりも設計上の問題であるかもしれません。

+1

Javaのコレクションのソースコードを見て、どのように行ったのかを確認しましたか?おそらくあなたの設計の質問にいくらかの洞察を与えるでしょう。 –

+0

C++ではstd :: vector :: iteratorを使うことができます。これはvectorにイテレータを含む名前空間があると仮定します。 –

+1

はい、あります。大丈夫です。要点は、イテレータ*インタフェース*はコレクションの反復処理方法を抽象化していることです。 iterator *実装*がこれを処理します。基本的には、イテレーターの実装をコレクションの実装の一部として考えることができます。重要なことは、インターフェイス間にそのような依存関係がないことです。 (つまり、コレクションであれば、指定された 'Iterator'が動作します。) – millimoose

答えて

2

特殊な実装を除いて、コレクションはイテレータについて知る必要はありません。

この場合の点線は、インスタンス化を示しています。あなたが4冊の本のギャングを持っているならば、explantionは15頁の1.6節に与えられています。

具体的には、イテレータはJavaイテレータ()のCreateIteratorメソッドによって作成されます。

オタクユーモア:いいえ、それは必然的に環状でないあなたのジャージーショアの名は「INSTANTATION」である

+0

これらの特殊な実装は何でしょうか。あなたは例を投げることができますか? – Geek

1

を人々に伝えます。これは、いつでも指定したデータ構造に対して新しいイテレータを実装できるという事実によって明確になります。

たとえば、ArrayListの偶数番目の要素を昇順に、奇数番目の要素を降順に生成するイテレータが必要な場合は、その要素を書き込むことを妨げるものはありません。

関連する問題