组合模式(结构型设计模式)

来源:互联网 发布:js 获取table tr td 编辑:程序博客网 时间:2024/06/05 23:18

结构图
这里写图片描述
单个对象和组合对象的使用具有一致性,将对象组合成树状结构以表示“整体—部分”
文件和文件夹的案例:
实现

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;}

调试结果:
这里写图片描述

原创粉丝点击