技术开发 频道

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

  这个程序比较长,如果在我们的项目中有这样的程序,肯定是要被拉出来做典型的,你写一大坨的程序给谁呀,以后还要维护,程序要短小精悍!幸运的是,我们这是作为案例来讲解,而且就是指出这样组装这棵树是有问题的,等会我们深入讲解,先看运行结果:

名称:王大麻子    职位:总经理    薪水: 100000
名称:刘大瘸子    职位:研发部门经理    薪水:
10000
名称:杨三乜斜    职位:开发一组组长    薪水:
5000
名称:a    职位:开发人员    薪水:
2000
名称:b    职位:开发人员    薪水:
2000
名称:c    职位:开发人员    薪水:
2000
名称:吴大棒槌    职位:开发二组组长    薪水:
6000
名称:d    职位:开发人员    薪水:
2000
名称:e    职位:开发人员    薪水:
2000
名称:f    职位:开发人员    薪水:
2000
名称:郑老六    职位:研发部副总    薪水:
20000
名称:马二拐子    职位:销售部门经理    薪水:
20000
名称:h    职位:销售人员    薪水:
5000
名称:i    职位:销售人员    薪水:
4000
名称:赵三驼子    职位:财务部经理    薪水:
30000
名称:j    职位:财务人员    薪水:
5000
名称:k    职位:CEO秘书    薪水:
8000

  和我们期望的结果一样,一棵完整的树就生成了,而且我们还能够遍历。不错,不错,但是看类图或程序的时候,你有没有发觉有问题?getInfo每个接口都有,为什么不能抽象出来?Root类和Branch类有什么差别?根节点本身就是树枝节点的一种,为什么要定义成两个接口两个类?如果我要加一个任职期限,你是不是每个类都需要修改?如果我要后序遍历(从员工找到他的上级领导)能做到吗?——彻底晕菜了!

  问题很多,我们一个一个解决,先说抽象的问题。我们确实可以把IBranch和IRoot合并成一个接口,确认无疑的事我们先做,那我们就修改一下类图,如图21-3所示。

 

 图21-1 整合根节点和树枝节点后的类图

0
相关文章