Khái niệm:
Các đối tượng cấu thành các cấu trúc cây để mô tả bán toàn bộ hệ thống phần cấp. Composite để cho các client tác động các đối tượng riêng biệt và các thành phần của đối tượng một cách thống nhất
Mức độ sử dụng: khá cao
UML Class Diagram
Những lớp và/hoặc đối tượng trong mẫu thiết kế này:
- Component (DrawingElement):
+ khai báo interface cho các đối tượng trong thành phần.
+ thực thi hành vi mặc định cho interface chung cho tất cả các lớp tương ứng.
+ khai báo một interface để truy xuất và quản lý các thành phần con của nó.
+ (tùy chọn) định nghĩa một interface để truy xuất một thành phần cha của thành phần hiện tại trong cấu trúc đệ quy và thực thi nó nếu thích hợp.
- Leaf (PrimitiveElement):
+ mô tả các đối tượng “lá” trong thành phần. Một “lá” không có lá con.
+ định nghĩa hành vi cho các đối tượng nguyên thủy trong thành phần.
- Composite (CompositeElement):
+ định nghĩa hành vi cho các thành phần có phần con.
+ lưu trữ các thành phần con.
+ thực thi các hoạt động liên qua đến phần con trong Component interface
- Client (CompositeApp): tính toán các đối tượng trong thành phần thông qua Component interface.
Composite: khi nào dử dụng và sử dụng ở đâu
Mẫu thiết kế Composite là một cấu trúc dữ liệu trong bộ nhớ (in-memory data structures) với các nhóm các đối tượng, mỗi nhóm bao gồm nhiều item riêng biệt hoặc các nhóm khác.Ví dụ cho việc sử dụng mẫu thiết kế Composite là Tree control. Các nút của cây bao gồm một đối tượng cá biệt (nút lá) hoặc một nhóm các đối tượng (một cây con các nút). Tất cả các nút trong mẫu thiết kế Composite chia sẻ một interface dùng chung hỗ trợ các item riêng biệt cũng như các nhóm các item. iterface dùng chung này tạo điều kiện rất tốt cho việc thiết kế và xây dựng các thuật toán đệ quy lặp lại trên từng nút trong tập hợp Composite.
Về cơ bản, mẫu thiết kế Composite là một tập hợp mà bạn có thể sử dụng để xây dựng các cây và các đồ thị có hướng. Nó được dùng như bất kì tập hợp nào khác như mảng (array), danh sách (list), ngăn xếp (stack), từ điển (dictionary)…
Demo