技术开发 频道

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

  仔细看看这个类图,还能不能发现点问题。想想看接口的作用是什么?定义一类事物所具有的共性,那ILeaf和IBranch是不是也有共性呢?有,getInfo方法!我们是不是要把这个共性也封装起来呢?是的,是的,提炼事物的共同点,然后封装之,这是我们作为设计专家的拿手好戏,修改后的类图如图21-4所示。

图21-1 修改后的类图

  类图上增加了一个ICorp接口,它是公司所有人员信息的接口类,不管你是经理还是员工,你都有名字、职位、薪水,这个定义成一个接口没有错,但是你可能对于ILeaf接口持怀疑状态,空接口有何意义呀?有意义!它是每个树枝节点的代表,系统扩容的时候你就会发现它是多么“栋梁”。我们先来看新增加的接口ICorp,如代码清单21-8所示。

  代码清单21-8 公司人员接口

public interface ICorp {
    
//每个员工都有信息,你想隐藏,门儿都没有!
    public String getInfo();
}

  接口很简单,只有一个方法,就是获得员工的信息,树叶节点是最基层的构件,我们先来看看它的接口,空接口,对的,如代码清单21-9所示。

  代码清单21-9 树叶接口

public interface ILeaf extends ICorp {

}

  树叶接口的实现类如代码清单21-10所示。

  代码清单21-10 树叶接口

public class Leaf implements ILeaf {
    
//小兵也有名称
    private String name = "";
    
//小兵也有职位
    private String position = "";
    
//小兵也有薪水,否则谁给你干
    private int salary = 0;
    
//通过一个构造函数传递小兵的信息
    public Leaf(String name,String position,int salary){
        
this.name = name;
        
this.position = position;
        
this.salary = salary;
    }
    
//获得小兵的信息
    public String getInfo() {
        String info
= "";
        info
= "姓名:" + this.name;
        info
= info + "\t职位:"+ this.position;
        info
= info + "\t薪水:" + this.salary;
        
return info;
    }
}
0
相关文章