设计模式之组合模式(Composite)
来源:互联网 发布:mac更换登录帐号 编辑:程序博客网 时间:2024/06/12 23:31
优点:1)组合模式使基本对象组合成复杂对象,复杂对象继续组合,形成递归
2)组合模式可以让客户使用一致的组合对象和单个对象
#include <iostream>#include <vector>using namespace std;//纯虚函数,只提供接口,没有默认的实现class Base{public: virtual void Operation(){} virtual void add(Base *){} virtual Base *getChild(int){return NULL;} virtual ~Base(){}protected: string _name;};//Leaf是叶子结点,也就是不含有子组件的结点类,所以不用实现Add、Remove、GetChild等方法class Leaf : public Base{public: void Operation(){cout<< "Leaf name:" << _name.c_str() <<endl;} Leaf(string name){_name = name;} ~Leaf(){}};class Composite : public Base{public: Composite(string name){_name = name;} ~Composite(){} void Operation() { cout<< "Composite name:" << _name.c_str() <<endl; for(int i = 0; i < _baseVector.size(); ++i) _baseVector.at(i)->Operation(); } void add(Base *base){_baseVector.push_back(base);} Base *getChild(int index) { if(index < 0 && index > _baseVector.size()) return NULL; return _baseVector[index]; }private: vector<Base*> _baseVector;};int main(){ Base *root = new Composite("root"); Base *a = new Leaf("a"); Base *b = new Leaf("b"); Base *c = new Leaf("c"); Base *composite = new Composite("composite"); composite->add(a); composite->add(b); root->add(c); root->add(composite); root->Operation(); return 0;}
运行结果:
Composite name:root
Leaf name:c
Composite name:composite
Leaf name:a
Leaf name:b
阅读全文
0 0
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 设计模式之Composite(组合)
- 模式设计之组合Composite
- 设计模式之Composite组合设计模式
- 设计模式之组合模式(Composite Pattern)
- 设计模式之组合模式(Composite Pattern)
- 设计模式读书笔记之组合模式(Composite)
- 设计模式之组合模式(Composite)
- 设计模式之(八)组合模式Composite
- 设计模式之组合模式(Composite Pattern)
- Oracle优化器、优化模式、表的连接方式(Hash Join、Nested Loop、Sort Merge Join)
- C++中重载、重写(覆盖)和隐藏的区别
- jqgrid 根据iRow获取唯一的rowid 以及互转
- 字符串分割--java中String.split()用法
- GBK与UTF-8的区别
- 设计模式之组合模式(Composite)
- 在Linux环境下搭建Tomcat+mysql+jdk环境
- MYSQL优化--索引(一)
- 欢迎使用CSDN-markdown编辑器
- opencv 4 边缘检测
- jsp中9大内置对象与servlet3大域对象与EL里面的11隐式对象
- Error:Could not find com.android.tools.build:gradle:2.3.3.
- JSONArray转java实体集合提示MorphDynaBean
- 零基础学TensorFlow(二):初识TensorFlow