美文网首页
结构型模式2-组合模式

结构型模式2-组合模式

作者: sunblog | 来源:发表于2018-04-16 23:09 被阅读0次

结构型模式2-组合模式

组合模式Composite

意图

将对象组合成属性结构,以表示“部分-整体”的层次结构。composite是的用户对单个对象和组合对象的使用具有一致性。

问题思考

考虑一个容器view,比如listview,包含了很多子view。listview本身也包含在了其他的容器view里,比如GridView。我们的窗口Window如果在这里区分是simple View、listview还是gridview,是没有必要的。window仅需要知道这是个view,知道怎么draw它就可以。

适用性

  • 想表示对象的部分-整体层次结构
  • 希望忽略组合对象和单个对象的不同,希望统一地使用组合结构中的所有对象。

类图

composite

实现

class Component {
public:
    virtual void Operation() = 0;

    virtual void Add(Component *) {};

    virtual void Remove(Component *) {};

    virtual Component *GetChild(int n) {};
};

class Composite : public Component {
public:
    void Operation() override {
        for (auto &e: mComponentList) {
            e->Operation();
        }
    }

    void Add(Component *component) override {
        for (auto &it : mComponentList) {
            if (it == component) {
                return;     // avoid duplication
            }
        }
        mComponentList.push_back(component);
    }

    void Remove(Component *component) override {
        // different
        for (auto it = mComponentList.begin(); it != mComponentList.end(); it++) {
            if (*it == component) {
                mComponentList.erase(it);
                return;
            }
        }
    }

    Component *GetChild(int n) override {
        if (mComponentList.size() > n) {
            return mComponentList.at(n);
        }
        return nullptr;
    }

private:
    std::vector<Component*> mComponentList;
};

class ConcreteComponent : public Component {
public:
    void Operation() override {
        // some operations
    }
};

注意:对于普通的component(非组合composite),Add,Remove,Get 这几个composite专属操作是无意义的,但为了保持接口统一,所以仍然存在。在这里我们普通component的对应的方法为空实现。

相关文章

  • 结构型模式2-组合模式

    结构型模式2-组合模式 组合模式Composite 意图 将对象组合成属性结构,以表示“部分-整体”的层次结构。c...

  • 设计模式分类汇总

    结构型 适配器模式 组合模式 桥接模式 代理模式 装饰者模式 门面模式 享元模式 行为型 责任链模式 命令模式 解...

  • 设计模式:组合模式 职责链模式

    组合模式 职责链模式 组合模式 组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。 在组合模式的树形结...

  • 结构型模式:组合模式

    文章首发:结构型模式:组合模式 七大结构型模式之三:组合模式。 简介 姓名 :组合模式 英文名 :Composit...

  • 设计模式笔记(10)--组合模式

    组合模式--类似树结构 GOF对组合模式的定义是:“将对象组合成树形结构以表示“部分-整体”的层次结构。”组合模式...

  • java23种设计模式

    创建型 抽象工厂模式工厂方法建造者模式原型模式单态模式 结构型 适配器模式桥接模式组合模式外观模式装饰者模式享元模...

  • 结构型模式:09-组合模式

    透明组合模式的完整结构 安全组合模式的完整结构

  • 组合模式

    设计模式之组合模式 什么是组合模式? 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以...

  • 组合模式

    模式定义 将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性...

  • JavaScript设计模式 | 14-组合模式

    1、模式定义 组合模式,又称“部分-整体”模式,把对象组合成树形结构,以表示出“部分-整体”的层次结构。组合模式,...

网友评论

      本文标题:结构型模式2-组合模式

      本文链接:https://www.haomeiwen.com/subject/ghpykftx.html