zoukankan      html  css  js  c++  java
  • 设计模式(八):组合模式

    优点:

      ① 都实现了Component接口,都具备了Add和Remove方法,使用户对单个对象(叶子)和组合对象(枝干)的调用没有区别。

      ② 扩展节点非常容易,便于后期扩展维护。

    缺点:

      使得设计更加复杂,客户端需要花更多时间理清类之间的层次关系。

    适用范围:

      只要是树形结构,只要是要体现局部和整体的关系的时候,就要考虑使用组合模式。

     

    客户端:

      //总公司

      ConcreteCompany root = new ConcreteCompany("北京总公司");
      root.add(new HRDepartment("总公司HR部门"));
      root.add(new FinanceDepartment("总公司财务部门"));

      //分公司
      ConcreteCompany com = new ConcreteCompany("上海华东分公司"); //组合对象(包含多个下级)
      com.add(new HRDepartment("华东分公司HR部门")); //单个对象
      com.add(new FinanceDepartment("华东分公司财务部门")); //单个对象
      root.add(com);

      //分公司下的办事处一
      ConcreteCompany com1 = new ConcreteCompany("南京办事处");
      com1.add(new HRDepartment("南京办事处HR部门"));
      com1.add(new FinanceDepartment("南京办事处财务部门"));
      com.add(com1);

      //分公司下的办事处二
      ConcreteCompany com2 = new ConcreteCompany("杭州办事处");
      com2.add(new HRDepartment("杭州办事处HR部门"));
      com2.add(new FinanceDepartment("杭州办事处财务部门"));
      com.add(com2);

      root.display(); //打印所有名称

    一句话概括:树形结构适用

        /**
         * Company           (公司接口,包括增加部门、删除部门、显示、所属职责等方法)
         *
         * ConcreteCompany   (实例化Company接口,为具体公司,枝干节点,有下级分公司。)
         * FinanceDepartment (实例化Company接口,财务部,叶节点,无下级)
         * HRDepartment      (实例化Company接口,HR部,叶节点,无下级)
         *
         */
  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/shushengyou/p/10231818.html
Copyright © 2011-2022 走看看