Click here to watch in Youtube : https://www.youtube.com/watch?v=EiU5mIHknGo
Click the below Image to Enlarge
Employee.java
public abstract class Employee
{
// next element in chain or responsibility
protected Employee supervisor;
public void setNextSupervisor( Employee supervisor )
{
this.supervisor = supervisor;
}
public abstract void applyLeave( String employeeName, int numberofDaysLeave );
}
public class TeamLeader extends Employee
{
// TeamLeader can only approve upto 10 days of leave
private int MAX_LEAVES_CAN_APPROVE = 10;
public void applyLeave( String employeeName, int numberofDaysLeave )
{
// check if TeamLeader can process this request
if( numberofDaysLeave <= MAX_LEAVES_CAN_APPROVE )
{
ApproveLeave(employeeName, numberofDaysLeave);
}
// if TeamLeader can't process the LeaveRequest then pass on to the supervisor(ProjectLeader)
// so that he can process
else
{
supervisor.applyLeave(employeeName, numberofDaysLeave);
}
}
private void ApproveLeave( String employeeName, int numberofDaysLeave )
{
System.out.println("TeamLeader approved " + numberofDaysLeave + " days " + "Leave for the employee : "
+ employeeName);
}
}
Chain Of Responsibility Design Pattern - Implementation - Class Diagram |
Employee.java
public abstract class Employee
{
// next element in chain or responsibility
protected Employee supervisor;
public void setNextSupervisor( Employee supervisor )
{
this.supervisor = supervisor;
}
public abstract void applyLeave( String employeeName, int numberofDaysLeave );
}
TeamLeader.java
public class TeamLeader extends Employee
{
// TeamLeader can only approve upto 10 days of leave
private int MAX_LEAVES_CAN_APPROVE = 10;
public void applyLeave( String employeeName, int numberofDaysLeave )
{
// check if TeamLeader can process this request
if( numberofDaysLeave <= MAX_LEAVES_CAN_APPROVE )
{
ApproveLeave(employeeName, numberofDaysLeave);
}
// if TeamLeader can't process the LeaveRequest then pass on to the supervisor(ProjectLeader)
// so that he can process
else
{
supervisor.applyLeave(employeeName, numberofDaysLeave);
}
}
private void ApproveLeave( String employeeName, int numberofDaysLeave )
{
System.out.println("TeamLeader approved " + numberofDaysLeave + " days " + "Leave for the employee : "
+ employeeName);
}
}
ProjectLeader.java
public class ProjectLeader extends Employee
{
// ProjectLeader can only approve upto 20 days of leave
private int MAX_LEAVES_CAN_APPROVE = 20;
public void applyLeave( String employeeName, int numberofDaysLeave )
{
// check if ProjectLeader can process this request
if( numberofDaysLeave <= MAX_LEAVES_CAN_APPROVE )
{
ApproveLeave(employeeName, numberofDaysLeave);
}
// if ProjectLeader can't process the LeaveRequest then pass on to the supervisor(HR)
// so that he can process
else
{
supervisor.applyLeave(employeeName, numberofDaysLeave);
}
}
private void ApproveLeave( String employeeName, int numberofDaysLeave )
{
System.out.println("ProjectLeader approved " + numberofDaysLeave + " days " + "Leave for the employee : "
+ employeeName);
}
}
HR.java
public class HR extends Employee
{
// HR can only approve upto 30 days of leave
private int MAX_LEAVES_CAN_APPROVE = 30;
public void applyLeave( String employeeName, int numberofDaysLeave )
{
if( numberofDaysLeave <= MAX_LEAVES_CAN_APPROVE )
{
ApproveLeave(employeeName, numberofDaysLeave);
}
else
{
System.out.println("Leave application suspended, Please contact HR");
}
}
private void ApproveLeave( String employeeName, int numberofDaysLeave )
{
System.out.println("HR approved " + numberofDaysLeave + " days " + "Leave for the employee : "
+ employeeName);
}
}
ChainPatternDemo.java
public class ChainPatternDemo
{
public static void main( String[] args )
{
TeamLeader teamLeader= new TeamLeader();
ProjectLeader projectLeader= new ProjectLeader();
HR hr=new HR();
teamLeader.setNextSupervisor(projectLeader);
projectLeader.setNextSupervisor(hr);
teamLeader.applyLeave("David", 9);
System.out.println();
teamLeader.applyLeave("John", 18);
System.out.println();
teamLeader.applyLeave("Steve", 30);
System.out.println();
teamLeader.applyLeave("Rohan", 50);
}
}
Output
TeamLeader approved 9 days Leave for the employee : David
ProjectLeader approved 18 days Leave for the employee : John
HR approved 30 days Leave for the employee : Steve
Leave application suspended, Please contact HR
See also:
No comments:
Post a Comment