Khái niệm:
Cung cấp một cách để truy xuất các thành phần của một đối tượng hợp nhất một cách tuần tự mà không cho thấy representation bên dưới của nó
Mức độ sử dụng: cao
UML Class Diagram
Những lớp và/hoặc đối tượng trong mẫu thiết kế này:
- Iterator (AbstractIterator): định nghĩa một interface để truy xuất và đi qua các thành phần.
- ConcreteIterator (Iterator):
+ thực thi Iterator interface
+ theo dõi vị trí hiện tại trong phần giao nhau của tập hợp
- Aggregate (AbstractCollection): Định nghĩa một interface để tạo một đối tượng Iterator.
- ConcreteAggregate (Collection): thực thi interface tạo lập Iterator để trả về một đối tượng của ConcreteIterator riêng.
Iterator: khi nào sử dụng và sử dụng ở đâu
Công việc thường được thực hiện khi lập trình đó là xem xét và tính toán tập hợp các đối tượng. Các tập hợp này có thể được lưu trữ bằng mảng (array), danh sách (list) hoặc gì đó phức tạp hơn chẳng hạn như cấu trúc cây hoặc đồ thị. Ngoài ra, bạn có thể cần truy xuất các item trong tập hợp theo lệnh, chẳng hạn như từ trước ra sau, từ sau ra trước, duyệt theo chiều sâu… Mẫu thiết kế Iterator giải quyết vấn đề này bằng cách tách biệt tập hợp các đối tượng từ phần giao nhau của các đối tượng này bằng việc thực thi một lớp iterator được chuyên biệt hóa.
Không những thế, bạn có thể tìm thấy mẫu thiết kế Interator sâu trong các thư việc .NET, nó là một trong 2 mẫu thiết kế mà là một phần của bản thân ngôn ngữ C# và VB (mẫu thiết kế khác là Observer). Cả hai ngôn ngữ đều có một kiến trúc được xây dựng sẵn tạo điều kiện đổi các tập hợp: foreach trong C# và For Each trong VB
Các đối tượng được tham chiếu trong “in” expression phải thực thi IEnumerable interface để tập hợp các đối tượng có thể được truy xuất.
Demo