首页 > 代码库 > 设计模式9——组合模式
设计模式9——组合模式
组合模式中,整体和部分可以同等看待,基类设定一个节点接口,可以派生出叶子节点和非叶子节点。叶子节点不能添加节点,非叶子节点可以添加,组成一个典型的树形结构。
组合模式在游戏引擎的渲染树中应用很广泛。
Composite.h内容
1 #ifndef Composite_H_H 2 #define Composite_H_H 3 4 #include<iostream> 5 #include<vector> 6 using namespace std; 7 8 class Composite 9 {10 public:11 Composite(string str) : name(str) {}12 virtual ~Composite() {}13 virtual void add(Composite *composite) = 0;14 virtual void display() = 0;15 protected:16 string name;17 };18 19 class Leaf : public Composite20 {21 public:22 Leaf(string str) : Composite(str) {}23 virtual void add(Composite *composite) {}24 virtual void display() { cout << name << " "; }25 private:26 27 };28 29 class Component : public Composite30 {31 public:32 Component(string str) : Composite(str) { }33 virtual void add(Composite *composite) { vecChildren.push_back(composite); }34 virtual void display(){35 cout << name << " " << endl;36 for(size_t i=0; i<vecChildren.size(); ++i){37 vecChildren[i]->display();38 }39 }40 private:41 vector<Composite*> vecChildren;42 };43 44 void CompositeTest()45 {46 Composite *com1 = new Component("A");47 Composite *leaf1 = new Leaf("B");48 Composite *leaf2 = new Leaf("C");49 com1->add(leaf1);50 com1->add(leaf2);51 52 Composite *com2 = new Component("D");53 Composite *leaf4 = new Leaf("E");54 Composite *leaf5 = new Leaf("F");55 com2->add(leaf4);56 com2->add(leaf5);57 58 com1->add(com2);59 60 com1->display();61 62 }63 64 #endif
设计模式9——组合模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。