组合模式又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次,它创建了对象组的树形结构。
// 接口类
class Component {
public:
virtual void process() = 0;
virtual ~Component() = default;
};
// 树节点
class Composite : public Component {
private:
string name;
vector<Component *> elements;
public:
Composite(const string &s) : name(s) {}
void add(Component *element) {
elements.emplace_back(element);
}
void process() override {
for (auto &e : elements) {
cout << name << endl;
e->process();
}
}
};
// 叶子节点
class Leaf : public Component {
private:
string name;
public:
Leaf(const string &s) : name(s) {}
void process() override {
cout << name << endl;
}
};
int main() {
Composite root("root");
Composite treeNode1("treeNode1");
Composite treeNode2("treeNode2");
Composite treeNode3("treeNode3");
Composite treeNode4("treeNode4");
Leaf leaf1("leaf1");
Leaf leaf2("leaf2");
root.add(&treeNode1);
treeNode1.add(&treeNode2);
treeNode2.add(&leaf1);
root.add(&treeNode3);
treeNode3.add(&treeNode4);
treeNode4.add(&leaf2);
root.process(); // 从root开始进行处理
treeNode3.process(); // 从treeNode3开始处理
}