这个程序比较长,如果在我们的项目中有这样的程序,肯定是要被拉出来做典型的,你写一大坨的程序给谁呀,以后还要维护,程序要短小精悍!幸运的是,我们这是作为案例来讲解,而且就是指出这样组装这棵树是有问题的,等会我们深入讲解,先看运行结果:
名称:王大麻子 职位:总经理 薪水: 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
名称:刘大瘸子 职位:研发部门经理 薪水: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 整合根节点和树枝节点后的类图