标签:
【1】什么是组合模式? 将对象组合成树形结构以表示“部分整体”的层次结构。 组合模式使得用户对单个对象和组合对象的使用具有一致性。 【2】组合模式代码示例: 代码示例: #include <iostream> #include <vector> #include <string> using namespace std; class Component { public: string name; Component(string name) { this->name = name; } virtual void add(Component *) = 0; virtual void remove(Component *) = 0; virtual void display(int) = 0; }; class Leaf : public Component { public: Leaf(string name) : Component(name) {} void add(Component *c) { cout << "leaf cannot add" << endl; } void remove(Component *c) { cout << "leaf cannot remove" << endl; } void display(int depth) { string str(depth, ‘-‘); str += name; cout << str << endl; } }; class Composite : public Component { private: vector<Component*> component; public: Composite(string name) : Component(name) {} void add(Component *c) { component.push_back(c); } void remove(Component *c) { vector<Component*>::iterator iter = component.begin(); while (iter != component.end()) { if (*iter == c) { component.erase(iter++); } else { iter++; } } } void display(int depth) { string str(depth, ‘-‘); str += name; cout << str << endl; vector<Component*>::iterator iter=component.begin(); while (iter != component.end()) { (*iter)->display(depth + 2); iter++; } } }; int main() { Component *p = new Composite("小李"); p->add(new Leaf("小王")); p->add(new Leaf("小强")); Component *sub = new Composite("小虎"); sub->add(new Leaf("小王")); sub->add(new Leaf("小明")); sub->add(new Leaf("小柳")); p->add(sub); p->display(0); cout << "*******" << endl; sub->display(2); return 0; } //Result: /* 小李 --小王 --小强 --小虎 ----小王 ----小明 ----小柳 ******* --小虎 ----小王 ----小明 ----小柳 */
http://www.cnblogs.com/Braveliu/p/3946914.html
标签:
原文地址:http://www.cnblogs.com/leijiangtao/p/4534582.html