Design Patterns: Mẫu Iterator

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Vấn đề đặt ra

Một đối tượng tập hợp như là một danh sách cũng cung cấp cho ta các phương thức truy cập các thành phần của nó. Tuy nhiên đôi lúc chúng ta cần duyệt các thành phần của danh sách theo những cách thức và tiêu chí khác nhau. Chúng ta không nên làm phồng giao diện của danh sách List với các phương thức cho các cách thức duyệt.

Mẫu Iterator cho phép chúng ta duyệt danh sách dễ dàng bằng cách tách rời chức năng truy cập và duyệt ra khỏi danh sách và đặt vào đối tượng iterator. Lớp Iterator sẽ định nghĩa một giao diện để truy cập các thành phần của danh sách, đồng thời quản lý cách thức duyệt danh sách hiện thời.

Ví dụ :

iterator

Mỗi đối tượng thuộc ListIterator quản lý một đối tượng List. Phương thức CurrentItem trả về đối tượng hiện thời, First chuyển đến đối tượng đầu tiên còn Next chuyển sang đối tượng tiếp theo; IsDone kiểm tra xem quá trình duyệt đã hoàn tất chưa.

Việc tách biệt giữa cơ chế duyệt và đối tượng List cho phép chúng ta xây dựng các đối tượng iterator với các tiêu khác nhau. Lấy ví dụ, hàm FilteringListIterator chỉ cung cấp quyền truy cập đến các thành phần thoả mãn điều kiện lọc.

Định nghĩa

Mẫu Iterator cung cấp khả năng truy cập và duyệt các thành phần của một tập hợp không cần quan tâm đến cách thức biểu diễn bên trong.

Sơ đồ UML

iterator: uml diagram

Iterator (AbstractIterator)

  • Định nghĩa một giao diện cho việc truy cập và duyệt các phần tử

ConcreteIterator (Iterator)

  • Cài đặt giao diện Iterator
  • Giữ dấu vết của vị trí hiện tại trong tập duyệt

Aggregate (AbstractCollection)

  • Định nghĩa một giao diện để tạo một đối tượng Iterator

ConcreteAggregate (Collection)

  • Cài đặt giao diện tạo Iterator để trả về một thể nghiệm đúng của ConcreteIterator.

Ứng dụng

  • Hỗ trợ nhiều phương án duyệt một tập hợp.
  • Đơn giản hoá giao diện tập hợp.
  • Cho phép có lớn hơn một cách thức duyệt đối với một tập hợp tại một thời điểm.
  • Truy cập các thành phần của một tập hợp mà không cần quan tâm đến cách thức biểu diễn bên trong.
  • Hỗ trợ nhiều phương án duyệt của các đối tượng tập hợp.
  • Cung cấp giao diện chung cho việc duyệt các cấu trúc tập hợp.

Các mẫu liên quan

Iterator thường được sử dụng để duyệt một cấu trúc đệ quy như Composite.

Đa hình một Iterator dựa trên FactoryMethod để tạo thể nghiệm cho các lớp con tương ứng của Iterator.

Memento thường được sử dụng cùng với Iterator.Một Iterator có thể sử dụng một Memento để nắm bắt trạng thái của một Iterator. Iterator lưu trữ các memento ở bên trong.

» Tiếp: Mẫu Mediator
« Trước: Mẫu Interperter
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!