组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构,并且能像使用独立对象一样使用它们。
组合模式主要包含以下几个角色:
组合模式的主要优点是:
以下是一个简单的C++实现的组合模式(Composite Pattern)示例:
#include
#include
// 抽象组件
class Component {
public:
virtual void operation() = 0;
virtual void add(Component* c) {}
virtual void remove(Component* c) {}
virtual ~Component() {}
};
// 叶子组件
class Leaf : public Component {
public:
void operation() override {
std::cout << "Leaf operation..." << std::endl;
}
};
// 复合组件
class Composite : public Component {
public:
void operation() override {
std::cout << "Composite operation..." << std::endl;
for (Component* c : children) {
c->operation();
}
}
void add(Component* c) override {
children.push_back(c);
}
void remove(Component* c) override {
children.erase(std::remove(children.begin(), children.end(), c), children.end());
}
~Composite() {
for (Component* c : children) {
delete c;
}
children.clear();
}
private:
std::vector<Component*> children;
};
int main() {
Composite* composite = new Composite();
composite->add(new Leaf());
composite->add(new Leaf());
Composite* composite2 = new Composite();
composite2->add(new Leaf());
composite2->add(new Leaf());
composite->add(composite2);
composite->operation();
delete composite;
return 0;
}
在这个例子中,Component是抽象组件,定义了operation、add和remove等接口。Leaf是叶子组件,实现了operation接口。Composite是复合组件,除了实现operation接口,还实现了add和remove接口,用于添加和删除子组件。在operation接口中,Composite会调用所有子组件的operation接口。