技术开发 频道

组合模式:实战人事管理之树状结构

  这个精简得比较多,几行代码就完成了,确实就应该这样,下面是小头目的实现类,如代码清单21-16所示。

  代码清单21-16 树枝节点

public class Branch extends Corp {
    
//领导下边有那些下级领导和小兵
    ArrayList<Corp> subordinateList = new ArrayList<Corp>();
    
//构造函数是必须的了
    public Branch(String _name,String _position,int _salary){
        
super(_name,_position,_salary);
    }
    
//增加一个下属,可能是小头目,也可能是个小兵
    public void addSubordinate(Corp corp) {
        
this.subordinateList.add(corp);
    }
    
//我有哪些下属
    public ArrayList<Corp> getSubordinate() {
        
return this.subordinateList;
    }
}

  场景类中构建树形结构,并进行遍历。组装没有变化,遍历组织机构数稍有变化,如代码清单21-17所示。

  代码清单21-17 稍稍修改的场景类

public class Client {
    
//遍历整棵树,只要给我根节点,我就能遍历出所有的节点
    public static String getTreeInfo(Branch root){
        ArrayList
<Corp> subordinateList = root.getSubordinate();
        String info
= "";
        
for(Corp s :subordinateList){
            
if(s instanceof Leaf){ //是员工就直接获得信息
                info = info + s.getInfo()+"\n";
            }
else{ //是个小头目
                info = info + s.getInfo() +"\n"+ getTreeInfo((Branch)s);
            }
        }
        
return info;
    }
}

  场景类中main方法没有变动,请参考代码清单21-7所示,不再赘述。遍历组织机构树的getTreeInfo稍有修改,就是把用到ICorp接口的地方修改为Corp抽象类,仅仅修改了粗体部分,其他保持不变,运行结果相同。这就是组合模式。

0
相关文章