您的位置:首页 > 其它

设计模式学习(九):组合模式

2015-04-02 22:02 295 查看
有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

这个例子是最常见的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式