组合模式 详解

打印 上一主题 下一主题

主题 833|帖子 833|积分 2499

组合模式

简介: 将对象组合成树形结构以表示"部门-团体"的条理结构, 使得用户对单个对象和组合对象的使用具有同等性.
组合模式也是一种结构类型的模式.看简介比较容易明白, 究竟树形结构是数据结构必修的, 我们仍然举个例子方便明白
以公司的构造架构为例
公司 - 部门 - 员工
其中员工是叶子节点, 公司和部门是树枝节点
代码
  1. class Node
  2. {
  3. private:
  4.         string name;
  5. public:
  6.         Node(string s) : name(s) {};
  7.         string get_name() { return name; };
  8.         virtual void display() = 0;
  9.         virtual void add_node(Node* n) = 0;
  10. };
  11. class Leaf : public Node
  12. {
  13. public:
  14.         Leaf(string s) : Node(s) {};
  15.         void add_node(Node* n) override
  16.         {
  17.                 cout << "leaf node can not add node" << endl;
  18.         }
  19.         void display()
  20.         {
  21.                 cout << get_name() << endl;
  22.         }
  23. };
  24. class Branch : public Node
  25. {
  26. private:
  27.         vector<Node*> nodes;
  28. public:
  29.         Branch(string s) : Node(s) {};
  30.         void add_node(Node* n) override
  31.         {
  32.                 nodes.push_back(n);
  33.         }
  34.         void display() override
  35.         {
  36.                 cout << get_name() << endl;
  37.                 for (Node* m : nodes)
  38.                         m->display();
  39.         }
  40. };
  41. int main()
  42. {
  43.         Node* b = new Branch("公司");
  44.         Node* b1 = new Branch("__研发部");
  45.         Node* b2 = new Branch("__营销部");
  46.         Node* b3 = new Leaf("____小明");
  47.         Node* b4 = new Leaf("____小强");
  48.         Node* b5 = new Leaf("____小刚");
  49.         b->add_node(b1);
  50.         b->add_node(b2);
  51.         b1->add_node(b3);
  52.         b2->add_node(b4);
  53.         b2->add_node(b5);
  54.         b->display();
  55.         return 0;
  56. }
复制代码
执行结果


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表