首页 > 代码库 > 组合模式
组合模式
【1】什么是组合模式?
将对象组合成树形结构以表示“部分整体”的层次结构。
组合模式使得用户对单个对象和组合对象的使用具有一致性。
【2】组合模式代码示例:
代码示例:
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 6 class Component 7 { 8 public: 9 string name; 10 Component(string name) 11 { 12 this->name = name; 13 } 14 virtual void add(Component *) = 0; 15 virtual void remove(Component *) = 0; 16 virtual void display(int) = 0; 17 }; 18 19 class Leaf : public Component 20 { 21 public: 22 Leaf(string name) : Component(name) 23 {} 24 void add(Component *c) 25 { 26 cout << "leaf cannot add" << endl; 27 } 28 void remove(Component *c) 29 { 30 cout << "leaf cannot remove" << endl; 31 } 32 void display(int depth) 33 { 34 string str(depth, ‘-‘); 35 str += name; 36 cout << str << endl; 37 } 38 }; 39 40 class Composite : public Component 41 { 42 private: 43 vector<Component*> component; 44 public: 45 Composite(string name) : Component(name) 46 {} 47 void add(Component *c) 48 { 49 component.push_back(c); 50 } 51 void remove(Component *c) 52 { 53 vector<Component*>::iterator iter = component.begin(); 54 while (iter != component.end()) 55 { 56 if (*iter == c) 57 { 58 component.erase(iter++); 59 } 60 else 61 { 62 iter++; 63 } 64 } 65 } 66 void display(int depth) 67 { 68 string str(depth, ‘-‘); 69 str += name; 70 cout << str << endl; 71 72 vector<Component*>::iterator iter=component.begin(); 73 while (iter != component.end()) 74 { 75 (*iter)->display(depth + 2); 76 iter++; 77 } 78 } 79 }; 80 81 82 int main() 83 { 84 Component *p = new Composite("小李"); 85 p->add(new Leaf("小王")); 86 p->add(new Leaf("小强")); 87 88 Component *sub = new Composite("小虎"); 89 sub->add(new Leaf("小王")); 90 sub->add(new Leaf("小明")); 91 sub->add(new Leaf("小柳")); 92 93 p->add(sub); 94 p->display(0); 95 96 cout << "*******" << endl; 97 sub->display(2); 98 99 return 0;100 }101 //Result:102 /*103 小李104 --小王105 --小强106 --小虎107 ----小王108 ----小明109 ----小柳110 *******111 --小虎112 ----小王113 ----小明114 ----小柳115 */
Good Good Study, Day Day Up.
顺序 选择 循环 总结
组合模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。