组合模式
简介
: 将对象组合成树形结构以表示"部分-整体"的层次结构, 使得用户对单个对象和组合对象的使用具有一致性.
组合模式也是一种结构类型的模式.看简介比较容易理解, 毕竟树形结构是数据结构必修的, 我们仍然举个例子方便理解
以公司的组织架构为例
公司
- 部门
- 员工
其中员工是叶子节点, 公司和部门是树枝节点
代码
class Node
{
private:
string name;
public:
Node(string s) : name(s) {};
string get_name() { return name; };
virtual void display() = 0;
virtual void add_node(Node* n) = 0;
};
class Leaf : public Node
{
public:
Leaf(string s) : Node(s) {};
void add_node(Node* n) override
{
cout << "leaf node can not add node" << endl;
}
void display()
{
cout << get_name() << endl;
}
};
class Branch : public Node
{
private:
vector<Node*> nodes;
public:
Branch(string s) : Node(s) {};
void add_node(Node* n) override
{
nodes.push_back(n);
}
void display() override
{
cout << get_name() << endl;
for (Node* m : nodes)
m->display();
}
};
int main()
{
Node* b = new Branch("公司");
Node* b1 = new Branch("__研发部");
Node* b2 = new Branch("__营销部");
Node* b3 = new Leaf("____小明");
Node* b4 = new Leaf("____小强");
Node* b5 = new Leaf("____小刚");
b->add_node(b1);
b->add_node(b2);
b1->add_node(b3);
b2->add_node(b4);
b2->add_node(b5);
b->display();
return 0;
}
执行结果