Máy biến lặp chắc chắn phải biết về bộ sưu tập mà nó phải lặp lại. Bộ sưu tập cũng phải biết về trình phát lặp của nó không? Là phụ thuộc một cách hay cả hai cách? Nếu bộ sưu tập có kiến thức về việc thực hiện một trình lặp cụ thể thì có thể không có các chiến lược trình lặp khác nhau cho cùng một bộ sưu tập. Đây là suy nghĩ của tôi. Tôi đã đúng hay tôi đã làm cho nó hoàn toàn sai?Có sự phụ thuộc vòng tròn giữa bộ sưu tập và trình lặp của nó không?
Các GOF cuốn sách có sơ đồ này cho mô hình Iterator:
Tôi nghĩ rằng nó ngụ ý một sự phụ thuộc tròn. Tôi không chắc chắn về các đường chấm chấm từ List
đến LisIterator
và SkipList
đến SkipListIterator
.
P.S: Tôi xử lý Java hàng ngày nhưng có thể là câu hỏi thiết kế nhiều hơn là cụ thể cho một ngôn ngữ cụ thể.
Bạn đã xem mã nguồn cho các bộ sưu tập của Java để xem chúng đã làm như thế nào? Điều đó có lẽ sẽ cho một số hiểu biết sâu sắc về câu hỏi thiết kế của bạn. –
Trong C++ người ta có thể sử dụng: std :: vector :: iterator Mà làm cho tôi giả sử vector có một không gian tên chứa iterator. –
Có, có, và không sao. Vấn đề là giao diện * lặp * tóm tắt từ cách lặp qua bộ sưu tập. Việc lặp * thực hiện * xử lý việc này. Về cơ bản, bạn có thể xem xét việc thực hiện trình vòng lặp như là một phần của việc thực hiện bộ sưu tập. Điều quan trọng là không có sự phụ thuộc như vậy giữa các giao diện. (Tức là bạn không cần phải quan tâm đến loại bộ sưu tập nào, nếu nó thậm chí là một bộ sưu tập, một 'Iterator' đã cho hoạt động.) – millimoose