イテレーターは、コレクションについて繰り返し知っている必要があります。 コレクションも、そのイテレータについて知っていますか?依存関係は一方向か両方向か?コレクションに特定のイテレーター実装に関する知識がある場合、同じコレクションに対して異なるイテレーター戦略を持つことは不可能かもしれません。これは私の考えです。私は正しいのですか、それとも完全に間違っていましたか?コレクションとイテレータの間に循環依存関係はありますか?
GoF本はイテレータパターンのため、この図があります:私はそれが循環依存関係を暗示だと思う
を。私はList
からLisIterator
とSkipList
からSkipListIterator
までの点線についてはわかりません。
P.S:私は毎日Javaを扱いますが、特定の言語に特有のものよりも設計上の問題であるかもしれません。
Javaのコレクションのソースコードを見て、どのように行ったのかを確認しましたか?おそらくあなたの設計の質問にいくらかの洞察を与えるでしょう。 –
C++ではstd :: vector :: iteratorを使うことができます。これはvectorにイテレータを含む名前空間があると仮定します。 –
はい、あります。大丈夫です。要点は、イテレータ*インタフェース*はコレクションの反復処理方法を抽象化していることです。 iterator *実装*がこれを処理します。基本的には、イテレーターの実装をコレクションの実装の一部として考えることができます。重要なことは、インターフェイス間にそのような依存関係がないことです。 (つまり、コレクションであれば、指定された 'Iterator'が動作します。) – millimoose