Click here to watch in Youtube : https://www.youtube.com/watch?v=HM1Zn-uVF60
Click the below Image to Enlarge
Composite Design Pattern - Implementation |
Composite Design Pattern - Implementation - Class Diagram |
IEmployee.java
public interface IEmployee
{
public int getYearlySalary();
}
Employee.java
import java.util.ArrayList;
// Employee class is the Composite node [i.e. it can have other objects below it]
public class Employee implements IEmployee
{
private String name;
private int monthlySalary;
// Employee designation Can be CEO,Dev Manager,QA Manager,Dev TeamLead,QA TeamLead
private String designation;
private ArrayList<IEmployee> subordinateList = new ArrayList<IEmployee>();
public Employee( String name, int monthlySalary, String designation )
{
super();
this.name = name;
this.monthlySalary = monthlySalary;
this.designation = designation;
}
public String getName()
{
return name;
}
public void setName( String name )
{
this.name = name;
}
public int getMonthlySalary()
{
return monthlySalary;
}
public void setMonthlySalary( int monthlySalary )
{
this.monthlySalary = monthlySalary;
}
public String getDesignation()
{
return designation;
}
public void setDesignation( String designation )
{
this.designation = designation;
}
public ArrayList<IEmployee> getSubordinateList()
{
return subordinateList;
}
public void setSubordinateList( ArrayList<IEmployee> subordinateList )
{
this.subordinateList = subordinateList;
}
@Override
public int getYearlySalary()
{
return monthlySalary * 12;
}
public void addSubordinate( IEmployee employee )
{
subordinateList.add(employee);
}
public void removeSubordinate( IEmployee employee )
{
subordinateList.remove(employee);
}
public ArrayList<IEmployee> getChilds()
{
return getSubordinateList();
}
}
SoftwareEngineer.java
// SoftwareEngineer class is the Leaf node [i.e. it cann't have other objects below it]
public class SoftwareEngineer implements IEmployee
{
private String name;
private int monthlySalary;
// Employee designation Can be Dev Software Engineer, QA Software Engineer
private String designation;
public SoftwareEngineer( String name, int monthlySalary, String designation )
{
super();
this.name = name;
this.monthlySalary = monthlySalary;
this.designation = designation;
}
public String getName()
{
return name;
}
public void setName( String name )
{
this.name = name;
}
public int getMonthlySalary()
{
return monthlySalary;
}
public void setMonthlySalary( int monthlySalary )
{
this.monthlySalary = monthlySalary;
}
public String getDesignation()
{
return designation;
}
public void setDesignation( String designation )
{
this.designation = designation;
}
@Override
public int getYearlySalary()
{
return monthlySalary * 12;
}
}
CompositePatternDemo.java
import java.util.ArrayList;
public class CompositePatternDemo
{
public static void main( String[] args )
{
Employee dave = new Employee("Dave", 200000, "CEO");
Employee peter = new Employee("peter", 100000, "Dev Manager");
Employee john = new Employee("John", 100000, "QA Manager");
Employee rohan = new Employee("Rohan", 50000, "Dev TeamLead");
Employee vijay = new Employee("Vijay", 50000, "QA TeamLead");
SoftwareEngineer raj = new SoftwareEngineer("Raj", 30000, "Dev Software Engineer");
SoftwareEngineer mohan = new SoftwareEngineer("Mohan", 30000, "Dev Software Engineer");
SoftwareEngineer hema = new SoftwareEngineer("Hema", 30000, "Dev Software Engineer");
SoftwareEngineer saran = new SoftwareEngineer("Saran", 20000, "QA Software Engineer");
SoftwareEngineer riya = new SoftwareEngineer("Riya", 20000, "QA Software Engineer");
dave.addSubordinate(peter);
dave.addSubordinate(john);
peter.addSubordinate(rohan);
john.addSubordinate(vijay);
rohan.addSubordinate(raj);
rohan.addSubordinate(mohan);
rohan.addSubordinate(hema);
vijay.addSubordinate(saran);
vijay.addSubordinate(riya);
getSubOrdinates(dave);
getSubOrdinates(peter);
getSubOrdinates(john);
getSubOrdinates(rohan);
getSubOrdinates(vijay);
getSubOrdinates(raj);
getSubOrdinates(mohan);
getSubOrdinates(hema);
getSubOrdinates(saran);
getSubOrdinates(riya);
}
private static void getSubOrdinates( IEmployee iemployee )
{
if( iemployee instanceof Employee )
{
Employee employee = (Employee) iemployee;
System.out.println("\n------------- SubordinatesListOf "+ employee.getName() +" : "+employee.getDesignation() + " ---------------------------------\n");
ArrayList<IEmployee> subordinatesListOfDave = employee.getChilds();
for( IEmployee iEmployee : subordinatesListOfDave )
{
if( iEmployee instanceof Employee )
{
Employee employeeObj = (Employee) iEmployee;
System.out.println(employeeObj.getName() + " : " + employeeObj.getDesignation() + ":"
+ employeeObj.getMonthlySalary() + ":" + employeeObj.getYearlySalary());
}
else
{
SoftwareEngineer softwareEngineer = (SoftwareEngineer) iEmployee;
System.out.println(softwareEngineer.getName() + " : "
+ softwareEngineer.getDesignation() + ":"
+ softwareEngineer.getMonthlySalary() + ":"
+ softwareEngineer.getYearlySalary());
}
}
}
else
{
System.out.println("\n--------------------------------------------------------------------------------------");
SoftwareEngineer softwareEngineer = (SoftwareEngineer) iemployee;
System.out.println("\nNo Subordinates for "+softwareEngineer.getName()+" : "+softwareEngineer.getDesignation()
+" : "+softwareEngineer.getMonthlySalary()+" : "+softwareEngineer.getYearlySalary());
}
}
}
Output
------------- SubordinatesListOf Dave : CEO ---------------------------------
peter : Dev Manager:100000:1200000
John : QA Manager:100000:1200000
------------- SubordinatesListOf peter : Dev Manager ---------------------------------
Rohan : Dev TeamLead:50000:600000
------------- SubordinatesListOf John : QA Manager ---------------------------------
Vijay : QA TeamLead:50000:600000
------------- SubordinatesListOf Rohan : Dev TeamLead ---------------------------------
Raj : Dev Software Engineer:30000:360000
Mohan : Dev Software Engineer:30000:360000
Hema : Dev Software Engineer:30000:360000
------------- SubordinatesListOf Vijay : QA TeamLead ---------------------------------
Saran : QA Software Engineer:20000:240000
Riya : QA Software Engineer:20000:240000
--------------------------------------------------------------------------------------
No Subordinates for Raj : Dev Software Engineer : 30000 : 360000
--------------------------------------------------------------------------------------
No Subordinates for Mohan : Dev Software Engineer : 30000 : 360000
--------------------------------------------------------------------------------------
No Subordinates for Hema : Dev Software Engineer : 30000 : 360000
--------------------------------------------------------------------------------------
No Subordinates for Saran : QA Software Engineer : 20000 : 240000
--------------------------------------------------------------------------------------
No Subordinates for Riya : QA Software Engineer : 20000 : 240000
No comments:
Post a Comment