zoukankan      html  css  js  c++  java
  • 设计模式--组合模式C++实现

    组合模式C++实现

    1定义

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

    2类图

    角色分析

    Component抽象构建角色

    定义参加组合独享的共同方法和属性,可以定义一些默认的行为或者属性

    Leaf叶子结构,旗下没有分支,是最小的遍历单位

    Composite树枝结构,作用是组合树枝节点和叶子结点形成的树形结构

    3实现

    class Component

    {

    protected:

      Component();

    public:

      virtual ~Component() = 0;

      //所有结点都有的共同信息

      virtual void doSomething() = 0;

    };

    //树枝结构

    class Composite :public Component

    {

    private:

      list<Component> _comList = new list<Component>();

    public:

      //增加一个叶子构建或者树枝构建

      void add(Component &Com)

      {

        _comList.push_back(Com);

      }

      void remove(Component &com)

      {

        _comList.remove(com);

      }

      list<Component> getChildren()

      {

        return _comList;

      }

    };

    //树叶结构

    class Leaf:public Component

    {

    public:

      //覆盖父类方法

      void doSomething()

      {}

    };

    void display(Composite root)

    {

      //遍历root的孩子,

      如果是叶子:打印

      else 

        递归

    }

    void Test

    {

      Composite *root = new Composite();

      root->doSomething();

      composite *branch = new Composite();

      Leaf* leaf = new Leaf();

      root->add(branch);

      root->add(leaf);

    }

    4应用

    ①优点

    高层模块调用简单,所有结点都是Component ,局部和整体对调用者来说没有任何区别,高层不必关心自己处理的是单个对象还是整个组合结构

    结点自由增加,使用组合模式,如果想增加树枝节点,树叶结点都很容易,只要找到父节点就行,符合开闭原则

    ②缺点

    树枝和树叶结点使用时的定义,直接使用的是实现类。违背依赖倒置原则

    ③使用场景

    维护和展示一部分-整体关系的场景:eg树形菜单,文件和文件夹管理

    从一个整体中能够独立出部分模块和功能的场景

    ④注意事项

    只要是树形结构,就考虑组合模式,只要体现这你部分关系,就使用组合模式

    5扩展

    ①项目中常用的一种:由文件中的职员表项简历数据结构。能够通过for和递归直接创建结构

    ②组合模式:

    a安全模式-如上

    b透明模式-把用来组合使用的方法放在抽象类中,eg:add,remove,getChild

    所以:叶子节点和树枝节点都继承得到以上方法,只是叶子节点内部空实现,什么也不做。。这样做的好处是,客户端遍历直接多态化,不用类型转换。

    6提升

    对于这个组合模式,可能存在随机访问的问题,那么 增加一个父指针,实现目标即可

  • 相关阅读:
    wf(三)
    WF(二)
    WF4.0入门(一)
    枚举
    函数和立即函数
    对象字面量
    Break和continue语句
    对象
    循环语句
    条件分支语句(SWICH语句)
  • 原文地址:https://www.cnblogs.com/lang5230/p/5329563.html
Copyright © 2011-2022 走看看