Iterator

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

iterator_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

iterator_ex_c#

iterator_ex_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

IteratorRealWorldClassDiagram

http://cid-d0e5ddf023bf4324.office.live.com/embedicon.aspx/.Public/Design%20Pattern/IteratorRealWorld.zip

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s