รูปแบบคอมโพสิตถูกใช้ในที่ที่เราจำเป็นต้องปฏิบัติต่อกลุ่มของวัตถุในลักษณะที่คล้ายคลึงกันเป็นวัตถุเดียว รูปแบบคอมโพสิตประกอบด้วยออบเจกต์ในแง่ของโครงสร้างแบบต้นไม้เพื่อแสดงส่วนต่างๆ เช่นเดียวกับลำดับชั้นทั้งหมด รูปแบบการออกแบบประเภทนี้อยู่ภายใต้รูปแบบโครงสร้างเนื่องจากรูปแบบนี้สร้างโครงสร้างต้นไม้ของกลุ่มวัตถุ
รูปแบบนี้สร้างคลาสที่มีกลุ่มของวัตถุของตัวเอง คลาสนี้มีวิธีแก้ไขกลุ่มของวัตถุเดียวกัน
เรากำลังสาธิตการใช้รูปแบบผสมผ่านตัวอย่างต่อไปนี้ ซึ่งเราจะแสดงลำดับชั้นพนักงานขององค์กร
ที่นี่เราจะเห็นว่าคอมโพสิทและลีฟทั้งสองคลาสกำลังใช้งานคอมโพเนนต์ ส่วนที่สำคัญคือคลาสคอมโพสิต ซึ่งยังมีออบเจ็กต์ส่วนประกอบที่แสดงโดยความสัมพันธ์ขององค์ประกอบ
โค้ดตัวอย่าง
#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(); }
ผลลัพธ์
Item added to the copy Item added into the page Item removed from the copy Item Removed from page