设计模式学习(九):组合模式
2015-04-02 22:02
295 查看
有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
这个例子是最常见的UI元素。比如,一个Panel可以包括button 和eidtview等等,其实这3个元素都是一个View
代码
使用
结果
这个例子是最常见的UI元素。比如,一个Panel可以包括button 和eidtview等等,其实这3个元素都是一个View
代码
#include <iostream> #include <vector> using namespace std; class View{ public: virtual void show() = 0; virtual void add(View *) = 0; virtual void remove(View *) = 0; virtual View * getChild(int index) = 0; }; class Button:public View { public: void show() {cout<<"Button"<<endl;} void add(View *) {} void remove(View *) {} View * getChild(int index) {return NULL;} }; class EditView:public View { public: void show() {cout<<"EditView"<<endl;} void add(View *) {} void remove(View *) {} View * getChild(int index) {return NULL;} }; class Panel:public View{ public: void show() { int num = vec.size(); cout<<"panel----start"<<endl; for (int i = 0; i < num; i++) { vec[i]->show(); } cout<<"panel----end"<<endl; } void add(View * v) { vec.push_back(v); } void remove(View * v){ int num = vec.size(); for (int i = 0; i < num; i++) { if(vec[i] == v) {vec.pop_back();return ;} } } View * getChild(int index){ return vec[index]; } private: vector<View *> vec; };
使用
int main(){ View *v = new Button(); View *panel = new Panel(); panel->add(v); v = new EditView(); panel->add(v); panel->show(); return 1; }
结果
panel----start Button EditView panel----end
相关文章推荐
- 设计模式学习之组合模式(Composite)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 设计模式学习笔记-组合模式(转载)
- 组合模式 - 设计模式学习
- java 设计模式学习笔记八 composite组合模式
- 设计模式学习(七)----迭代和组合
- 设计模式学习-每日一记(10.组合模式)
- 设计模式学习总结-组合模式(Composite Method)
- 设计模式入门学习 组合模式
- 《Head First 设计模式》学习笔记:迭代器模式与组合模式
- 面向对象设计模式之Composite组合模式学习笔记
- “设计模式”学习之四:组合(结构型)与迭代器(行为型)
- 设计模式学习-Composite(组合模式)
- 设计模式学习笔记之组合模式
- 设计模式学习笔记十七:组合模式(Composite Pattern)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 设计模式学习笔记:组合模式
- 设计模式学习笔记之组合模式模式
- java 设计模式学习笔记八 composite组合模式