Mẫu phức hợp được sử dụng khi chúng ta cần xử lý một nhóm đối tượng theo cách tương tự như một đối tượng duy nhất. Mẫu tổng hợp bao gồm các đối tượng dưới dạng cấu trúc cây để đại diện cho một phần cũng như toàn bộ hệ thống phân cấp. Loại mẫu thiết kế này nằm dưới mẫu cấu trúc vì mẫu này tạo ra cấu trúc dạng cây gồm các nhóm đối tượng.
Mẫu này tạo ra một lớp chứa nhóm các đối tượng của chính nó. Lớp này cung cấp các cách để sửa đổi nhóm các đối tượng giống nhau của nó.
Chúng tôi đang chứng minh việc sử dụng mô hình kết hợp thông qua ví dụ sau, trong đó chúng tôi sẽ hiển thị thứ bậc nhân viên của một tổ chức.
Ở đây chúng ta có thể thấy hỗn hợp và lá cả hai lớp đang thực hiện thành phần. Phần quan trọng là lớp tổng hợp, lớp này cũng chứa các đối tượng thành phần được hiển thị bằng mối quan hệ thành phần.
Mã mẫu
#include <iostream> #include <vector> using namespace std; class PageObject { public: virtual void addItem(PageObject a) { } virtual void removeItem() { } virtual void deleteItem(PageObject a) { } }; class Page : public PageObject { public: void addItem(PageObject a) { cout << "Item added into the page" << endl; } void removeItem() { cout << "Item Removed from page" << endl; } void deleteItem(PageObject a) { cout << "Item Deleted from Page" << endl; } }; class Copy : public PageObject { vector<PageObject> copyPages; public: void AddElement(PageObject a) { copyPages.push_back(a); } void addItem(PageObject a) { cout << "Item added to the copy" << endl; } void removeItem() { cout << "Item removed from the copy" << endl; } void deleteItem(PageObject a) { cout << "Item deleted from the copy"; } }; int main() { Page p1; Page p2; Copy myCopy; myCopy.AddElement(p1); myCopy.AddElement(p2); myCopy.addItem(p1); p1.addItem(p2); myCopy.removeItem(); p2.removeItem(); }
Đầu ra
Item added to the copy Item added into the page Item removed from the copy Item Removed from page