Employee.java
import java.util.ArrayList;
public class Employee {
private String firstName, lastName;
private String department;
private ArrayList subordinates;
public Employee(String firstName, String lastName, String department) {
// TODO Auto-generated constructor stub
this.firstName=firstName;
this.lastName=lastName;
this.department=department;
subordinates = new ArrayList();
}
public void addSubordinateEmployee(Employee emp){
this.subordinates.add(emp);
}
public ArrayList getSubordinates(){
ArrayList subordinatesList = new ArrayList();
subordinatesList.addAll(this.subordinates);
for(Employee emp: this.subordinates){
subordinatesList.addAll(emp.getSubordinates());
}
return subordinatesList;
}
public String toString(){
return firstName+", "+lastName+", "+department;
}
}
CompositePatternDemo.java
import java.util.ArrayList;
public class CompositePatternDemo {
public CompositePatternDemo() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Employee ManagingDirector = new Employee("Jane", "Dsouza","Management");
Employee CEO = new Employee("Hana", "Fujita", "Management");
Employee PM1 = new Employee("Sara", "Mehta", "Management");
Employee Lead1 = new Employee("Saran","Kumar", "Technical");
Employee Developer1 = new Employee("Raja", "Moni", "Technical");
Employee PM2 = new Employee("Hara", "Mehta", "Management");
Employee Lead2 = new Employee("Karan","Kumar", "Technical");
Employee Developer2 = new Employee("Kajol", "Soni", "Technical");
ManagingDirector.addSubordinateEmployee(CEO);
CEO.addSubordinateEmployee(PM1);
CEO.addSubordinateEmployee(PM2);
PM1.addSubordinateEmployee(Lead1);
Lead1.addSubordinateEmployee(Developer1);
PM2.addSubordinateEmployee(Lead2);
Lead2.addSubordinateEmployee(Developer2);
//print hierarachy of ManagingDirector
ArrayList ManagindDirectorHierarchy = ManagingDirector.getSubordinates();
System.out.println("ManagingDirectorHierarchy :"+ManagindDirectorHierarchy);
//print hierarchy of PM2
ArrayList PM2Hierarchy = PM2.getSubordinates();
System.out.println("PM2Hierarchy :"+PM2Hierarchy);
}
}
Output
