技术开发 频道

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

  好了,所有的根节点、树枝节点和叶子节点都已经实现了,从总经理、部门经理到最终的员工都已经实现,然后的工作就是组装成一个树状结构并遍历这颗树,通过什么来完成呢?通过场景类Client完成,如代码清单21-7所示。

  代码清单21-7 场景类

public class Client {
    
    
public static void main(String[] args) {
        
//首先产生了一个根节点
        IRoot ceo = new Root("王大麻子","总经理",100000);        
        
//产生三个部门经理,也就是树枝节点
        IBranch developDep = new Branch("刘大瘸子","研发部门经理",10000);
        IBranch salesDep
= new Branch("马二拐子","销售部门经理",20000);
        IBranch financeDep
= new Branch("赵三驼子","财务部经理",30000);
        
        
//再把三个小组长产生出来
        IBranch firstDevGroup = new Branch("杨三乜斜","开发一组组长",5000);
        IBranch secondDevGroup
= new Branch("吴大棒槌","开发二组组长",6000);
        
        
//剩下的及时我们这些小兵了,就是路人甲,路人乙
        ILeaf a = new Leaf("a","开发人员",2000);
        ILeaf b
= new Leaf("b","开发人员",2000);
        ILeaf c
= new Leaf("c","开发人员",2000);
        ILeaf d
= new Leaf("d","开发人员",2000);
        ILeaf e
= new Leaf("e","开发人员",2000);
        ILeaf f
= new Leaf("f","开发人员",2000);
        ILeaf g
= new Leaf("g","开发人员",2000);
        ILeaf h
= new Leaf("h","销售人员",5000);
        ILeaf i
= new Leaf("i","销售人员",4000);
        ILeaf j
= new Leaf("j","财务人员",5000);
        ILeaf k
= new Leaf("k","CEO秘书",8000);
        ILeaf zhengLaoLiu
= new Leaf("郑老六","研发部副总",20000);        
        
//该产生的人都产生出来了,然后我们怎么组装这棵树
        
//首先是定义总经理下有三个部门经理
        ceo.add(developDep);
        ceo.add(salesDep);
        ceo.add(financeDep);
        
//总经理下还有一个秘书
        ceo.add(k);
        
//定义研发部门 下的结构
        developDep.add(firstDevGroup);
        developDep.add(secondDevGroup);
        
//研发部经理下还有一个副总
        developDep.add(zhengLaoLiu);    
        
//看看开发两个开发小组下有什么
        firstDevGroup.add(a);
        firstDevGroup.add(b);
        firstDevGroup.add(c);
        secondDevGroup.add(d);
        secondDevGroup.add(e);
        secondDevGroup.add(f);    
        
//再看销售部下的人员情况
        salesDep.add(h);
        salesDep.add(i);
        
//最后一个财务
        financeDep.add(j);
        
//树状结构写完毕,然后我们打印出来
        System.out.println(ceo.getInfo());
        
//打印出来整个树形
        getAllSubordinateInfo(ceo.getSubordinateInfo());
    }
    
//遍历所有的树枝节点,打印出信息
    private static void getAllSubordinateInfo(ArrayList subordinateList){
        
int length = subordinateList.size();
        
for(int m=0;m<length;m++){  //定义一个ArrayList长度,不要在for循环中每次计算
            Object s = subordinateList.get(m);
            
if(s instanceof Leaf){  //是个叶子节点,也就是员工
                ILeaf employee = (ILeaf)s;
                System.out.println(((Leaf) s).getInfo());
            }
else{
                IBranch branch
= (IBranch)s;
                System.out.println(branch.getInfo());
                
//再递归调用
                getAllSubordinateInfo(branch.getSubordinateInfo());
            }
        }
    }
}
0
相关文章