将对象组合成树形结构以表示”部分-整体”的层次结构
类图:
实现:
雇员类:
public abstract class Employer {
private String name;
public List employers;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void add(Employer employer);
public abstract void remove(Employer employer);
public void printInfo() {
System.out.println(name);
}
public List getEmployers() {
return this.employers;
}
}
项目经理类:
public class ProjectManager extends Employer {
public ProjectManager(String name) {
setName(name);
employers = new ArrayList();
}
public void add(Employer employer) {
employers.add(employer);
}
public void remove(Employer employer) {
employers.remove(employer);
}
}
项目助理类:
public class ProjectAssistant extends Employer {
public ProjectAssistant(String name) {
setName(name);
employers = null;//项目助理, 表示没有下属了
}
public void add(Employer employer) {
}
public void remove(Employer employer) {
}
}
小码农:
public class Programmer extends Employer {
public Programmer(String name) {
setName(name);
employers = null;//程序员, 表示没有下属了
}
public void add(Employer employer) {
}
public void remove(Employer employer) {
}
}
测试:将项目助理和两个码农挂到项目经理下:
public static void main(String[] args) {
Employer pm = new ProjectManager("项目经理");
Employer pa = new ProjectAssistant("项目助理");
Employer programmer1 = new Programmer("程序员一");
Employer programmer2 = new Programmer("程序员二");
pm.add(pa);//为项目经理添加项目助理
pm.add(programmer1);//为项目经理添加程序员1
pm.add(programmer2);//为项目经理添加程序员2
List ems = pm.getEmployers();
for(Object e:ems){
System.out.println(((Employer)e).getName());
}
}