十分钟学会一个设计模式---结构模式---组合模式

87 阅读1分钟

组合模式又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次,它创建了对象组的树形结构。

// 接口类
class Component {
public:
    virtual void process() = 0;

    virtual ~Component() = default;
};

// 树节点
class Composite : public Component {
private:
    string name;
    vector<Component *> elements;
public:
    Composite(const string &s) : name(s) {}

    void add(Component *element) {
        elements.emplace_back(element);
    }

    void process() override {
        for (auto &e : elements) {
            cout << name << endl;
            e->process();
        }
    }
};

// 叶子节点
class Leaf : public Component {
private:
    string name;
public:
    Leaf(const string &s) : name(s) {}
    void process() override {
        cout << name << endl;
    }
};

int main() {
    Composite root("root");
    Composite treeNode1("treeNode1");
    Composite treeNode2("treeNode2");
    Composite treeNode3("treeNode3");
    Composite treeNode4("treeNode4");

    Leaf leaf1("leaf1");
    Leaf leaf2("leaf2");

    root.add(&treeNode1);
    treeNode1.add(&treeNode2);
    treeNode2.add(&leaf1);

    root.add(&treeNode3);
    treeNode3.add(&treeNode4);
    treeNode4.add(&leaf2);

    root.process();  // 从root开始进行处理
    treeNode3.process(); // 从treeNode3开始处理
}

参考:blog.csdn.net/u012011079/…