2013-03-12 3 views
5

반복자은 반복해야하는 컬렉션에 대해 확실히 알고 있어야합니다. 컬렉션반복자에 대해 알고 있어야합니까? 의존성은 편도 아니면 양방향입니까? 컬렉션에 특정 반복자 구현에 대한 지식이있는 경우 동일한 컬렉션에 대해 다른 반복기 전략을 사용하지 못할 수도 있습니다. 이것은 내 생각이다. 내가 맞습니까, 아니면 완전히 잘못 되었습니까?컬렉션과 iterator 사이에 순환 의존성이 있습니까?

enter image description here

나는 그것이 순환 종속성을 의미 생각 :

GoF의 책은 반복자 패턴이 다이어그램을 가지고있다. 점선에 관해서는 List에서 LisIterator까지 그리고 SkipList에서 SkipListIterator까지 확실하지 않습니다.

P.S : 나는 매일 자바를 다루지 만 특정 언어에 특화된 것보다 설계상의 질문 일 수 있습니다.

+1

Java 컬렉션에 대한 소스 코드를 살펴본 결과 어떻게 사용했는지 확인 했습니까? 아마 당신의 디자인 문제에 대한 통찰력을 줄 것입니다. –

+0

C++에서는 std :: vector :: iterator를 사용할 수 있습니다. 이는 vector에 iterator가 포함 된 네임 스페이스가 있다고 가정합니다. –

+1

예, 있습니다. 괜찮습니다. 핵심은 iterator * 인터페이스 *가 컬렉션을 반복하는 방법을 추상화한다는 것입니다. iterator * 구현 *이 이것을 처리합니다. 본질적으로 컬렉션 구현의 일부로 반복 구현을 고려할 수 있습니다. 중요한 점은 인터페이스간에 이러한 종속성이 없다는 것입니다. (즉 컬렉션이 무엇이든, 어떤 Iterator가 작동하는지 상관하지 않아도됩니다.) – millimoose

답변

2

일부 특수화 된 구현을 제외하고 컬렉션은 반복기에 대해 알 필요가 없습니다.

이 경우의 점선은 인스턴스화를 나타냅니다. 당신이 4 권의 책을 가지고 있다면, explantion은 15 쪽 1.6 절에 있습니다.

특히 iterator는 Java iterator()의 CreateIterator 메소드에 의해 작성됩니다.

괴짜 유머 감각 : 당신의 저지 쇼어 이름 "는 인스턴스화가"

+0

이러한 특수화 된 구현은 무엇입니까? 예제를 던질 수 있습니까? – Geek

1

입니다 아니, 필요성, 환상없는 사람을 말한다. 이것은 언제든지 주어진 데이터 구조에 대해 새로운 iterator를 구현할 수 있다는 사실에 의해 분명해졌습니다.

예를 들어, 우선 ArrayList의 짝수 번호가 지정된 요소를 오름차순으로 생성하고 홀수 번호가 지정된 항목을 내림차순으로 생성하는 반복기가 필요한 경우 해당 항목을 쓰는 것을 차단할 수있는 요소는 없습니다.

관련 문제