组合模式(Composite Pattern)是一种结构型设计模式,其将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端可以统一对待单个对象和组合对象,从而支持对整个树形结构进行统一的处理。
角色
- 组件(Component): 定义组合中所有对象的通用接口,声明了用于管理子组件的方法。
- 叶子节点(Leaf): 是组合中的叶子对象,它没有子组件,实现了组件的通用接口。
- 复合节点(Composite): 是组合中的复合对象,它可以包含叶子节点和其他复合节点,实现了组件的通用接口,并提供了管理子组件的方法。
客户端通过统一的接口操作组合对象,不需要区分叶子节点和复合节点。这种统一的接口使得客户端可以递归地处理整个树形结构,而无需关心具体是叶子节点还是复合节点。
场景
应用模型能够表示成树形结构
类图
代码
#include <iostream>
#include <vector>
// 组件接口
class Component {
public:
virtual void operation() const = 0;
};
// 叶子节点
class Leaf : public Component {
public:
void operation() const override {
std::cout << "Leaf operation." << std::endl;
}
};
// 复合节点
class Composite : public Component {
public:
void add(Component* component) {
components.push_back(component);
}
void operation() const override {
std::cout << "Composite operation." << std::endl;
for (const auto& component : components) {
component->operation();
}
}
private:
std::vector<Component*> components;
};
int main() {
// 创建组合对象
Composite composite;
// 添加叶子节点和复合节点到组合对象
Leaf leaf1, leaf2;
Composite subComposite;
subComposite.add(&leaf1);
subComposite.add(&leaf2);
composite.add(&subComposite);
// 调用操作
composite.operation();
return 0;
}