涛声依旧在 发表于 2024-8-24 05:50:03

组合模式 详解

组合模式

简介: 将对象组合成树形结构以表示"部门-团体"的条理结构, 使得用户对单个对象和组合对象的使用具有同等性.
组合模式也是一种结构类型的模式.看简介比较容易明白, 究竟树形结构是数据结构必修的, 我们仍然举个例子方便明白
以公司的构造架构为例
公司 - 部门 - 员工
其中员工是叶子节点, 公司和部门是树枝节点
代码
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;
}
执行结果
https://i-blog.csdnimg.cn/direct/29e1a003e0364f99934c729969dd4577.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 组合模式 详解