结构图
单个对象和组合对象的使用具有一致性,将对象组合成树状结构以表示“整体—部分”
文件和文件夹的案例:
实现
class IFile{
protected:
string name;
public:
virtual void display() = 0;
virtual ~IFile(){}
};
class File :public IFile{
public:
File(){
this->name = "未命名文件";
}
File(string name){
this->name = name;
}
virtual void display(){
cout << name << endl;
}
~File(){
cout << "del---File---" << name << endl;
}
};
class Floder :public IFile{
private:
vector<IFile*> vec;
public:
Floder(){
this->name = "未命名文件夹";
}
Floder(string name){
this->name = name;
}
virtual void display(){
cout << name<<endl;
vector<IFile*>::iterator it;
for (it = vec.begin(); it != vec.end(); it++){
(*it)->display();
}
}
void add(IFile *f){
vec.push_back(f);
}
~Floder(){
vector<IFile*>::iterator it;
for (it = vec.begin(); it != vec.end(); it++){
delete (*it);
}
cout << "del---Floder---" << name << endl;
}
};
Client
int main(void){
Floder *root = new Floder("root");
root->add(new File());
root->add(new File("aaa.txt"));
Floder *dir = new Floder();
root->add(dir);
dir->add(new File("bbb.txt"));
dir->add(new File("bbbb.txt"));
root->display();
delete root;
system("pause");
return 0;
}
调试结果: