public interface Company {
int calculateSalary();
}
public class University implements Company {
private int id;
private int salary;
private Organization rootOrg;
public University(int id) {
this.id = id;
this.salary = 0;
}
public void addCompany(Organization rootOrg){
this.rootOrg=rootOrg;
}
public int calculateSalary() {
return rootOrg.calculateSalary();
}
}
public class Organization implements Company {
private int id;
private Organization parent;
private List<Company> companies;
private int salary;
public Organization(int id, Organization parent) {
this.id = id;
this.parent = parent;
this.companies = new ArrayList<>();
this.salary = 0;
}
public void addCompany(Company company) {
companies.add(company);
if (company instanceof Organization) {
((Organization) company).setParent(this);
}
}
public void removeCompany(Company company) {
companies.remove(company);
}
public void setParent(Organization parent) {
this.parent = parent;
}
@Override
public int calculateSalary() {
salary=0;
for (Company company : companies) {
salary =salary+ company.calculateSalary();
}
return salary;
}
}
public class Teacher implements Company{
private String id;
private int orgId;
private int salary;
public Teacher(String id,int orgId,int salary){
this.id=id;
this.orgId=orgId;
this.salary=salary;
}
@Override
public int calculateSalary() {
return salary;
}
}
public class Main {
public static void main(String[] args) {
// 创建学校对象
University university = new University(0);
// 创建机构对象
Organization rootOrg = new Organization(1, null);
Organization subOrg1 = new Organization(2, null);
Organization subOrg2 = new Organization(3, null);
Organization subOrg3 = new Organization(4, null);
// 添加机构到学校
university.addCompany(rootOrg);
// 添加子机构到根机构
rootOrg.addCompany(subOrg1);
subOrg1.addCompany(subOrg2);
subOrg1.addCompany(subOrg3);
// 创建教职工对象
Teacher teacher1 = new Teacher("B001", 1, 4000);
Teacher teacher2 = new Teacher("B002", 2, 5000);
Teacher teacher3 = new Teacher("B003", 2, 7000);
Teacher teacher4 = new Teacher("B004", 3, 6000);
Teacher teacher5 = new Teacher("B005", 4, 8000);
// 添加教职工到机构
rootOrg.addCompany(teacher1);
subOrg1.addCompany(teacher2);
subOrg1.addCompany(teacher3);
subOrg2.addCompany(teacher4);
subOrg3.addCompany(teacher5);
// 计算每个机构下所有教职员工的薪资综合
System.out.println("根机构薪资总和:" + university.calculateSalary());
System.out.println("子机构1薪资总和:" + rootOrg.calculateSalary());
System.out.println("子机构2薪资总和:" + subOrg1.calculateSalary());
System.out.println("子机构3薪资总和:" + subOrg2.calculateSalary());
System.out.println("子机构4薪资总和:" + subOrg3.calculateSalary());
}
}