รูปแบบคอมโพสิตถูกใช้ในที่ที่เราจำเป็นต้องปฏิบัติต่อกลุ่มของวัตถุในลักษณะที่คล้ายคลึงกันเป็นวัตถุเดียว รูปแบบคอมโพสิตประกอบด้วยออบเจกต์ในแง่ของโครงสร้างแบบต้นไม้เพื่อแสดงส่วนต่างๆ เช่นเดียวกับลำดับชั้นทั้งหมด รูปแบบการออกแบบประเภทนี้อยู่ภายใต้รูปแบบโครงสร้างเนื่องจากรูปแบบนี้สร้างโครงสร้างต้นไม้ของกลุ่มวัตถุ
รูปแบบนี้สร้างคลาสที่มีกลุ่มของวัตถุของตัวเอง คลาสนี้มีวิธีแก้ไขกลุ่มของวัตถุเดียวกัน
เรากำลังสาธิตการใช้รูปแบบผสมผ่านตัวอย่างต่อไปนี้ ซึ่งเราจะแสดงลำดับชั้นพนักงานขององค์กร

ที่นี่เราจะเห็นว่าคอมโพสิทและลีฟทั้งสองคลาสกำลังใช้งานคอมโพเนนต์ ส่วนที่สำคัญคือคลาสคอมโพสิต ซึ่งยังมีออบเจ็กต์ส่วนประกอบที่แสดงโดยความสัมพันธ์ขององค์ประกอบ
โค้ดตัวอย่าง
#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