在C++中,组合模式是一种结构型设计模式,它允许你将对象组合成树形结构来表示部分-整体的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。
下面是一个简单的C++代码示例,展示了如何实现组合模式:
#include <iostream>
#include <vector>
#include <memory>
// 抽象组件类
class Component {
public:
virtual ~Component() = default;
virtual void operation() = 0;
};
// 叶子类
class Leaf : public Component {
public:
void operation() override {
std::cout << "Leaf operation" << std::endl;
}
};
// 组合类
class Composite : public Component {
private:
std::vector<std::shared_ptr<Component>> children;
public:
void add(std::shared_ptr<Component> component) {
children.push_back(component);
}
void operation() override {
std::cout << "Composite operation" << std::endl;
for (const auto& child : children) {
child->operation();
}
}
};
int main() {
auto root = std::make_shared<Composite>();
auto child1 = std::make_shared<Leaf>();
auto child2 = std::make_shared<Composite>();
auto grandchild = std::make_shared<Leaf>();
child2->add(grandchild);
root->add(child1);
root->add(child2);
root->operation();
return 0;
}
在这个示例中,我们定义了一个抽象基类Component
,它有一个虚函数operation()
。然后我们定义了一个叶子类Leaf
,它继承自Component
并实现了operation()
函数。接下来,我们定义了一个组合类Composite
,它也继承自Component
,并包含一个Component
类型的向量children
来存储子对象。Composite
类还重写了operation()
函数,以便在调用时遍历并调用其子对象的operation()
函数。
在main()
函数中,我们创建了一个组合对象的树形结构,并调用了根对象的operation()
函数,从而递归地调用了整个树形结构中的所有对象的operation()
函数。
这就是C++中实现组合模式的一个简单示例。