
One of the basic job of a manager is to
approve the leave of the superviser
public interface Manager {
public boolean approveLeave(int
noOfDays);
}
class ProjLead implements Manager {
private String name;
private Manager manager;
public ProjLead(String name, Manager manager) {
super();
this.name = name;
this.manager = manager;
}
@Override
public boolean approveLeave(int
noOfDays) {
if (noOfDays < 3) {
System.out.println("Leave
approved by ProjLead");
return true;
} else {
return manager.approveLeave(noOfDays);
}
}
}
class SeniorManager implements Manager {
private String name;
private Manager manager;
public SeniorManager(String name, Manager
manager) {
super();
this.name = name;
this.manager = manager;
}
@Override
public boolean approveLeave(int
noOfDays) {
if (noOfDays < 7) {
System.out.println("Leave
approved by SeniorManager");
return true;
} else {
return manager.approveLeave(noOfDays);
}
}
}
class ProgramManager implements Manager {
private String name;
private Manager manager;
public ProgramManager(String name, Manager
manager) {
super();
this.name = name;
this.manager = manager;
}
@Override
public boolean approveLeave(int
noOfDays) {
if (noOfDays < 15) {
System.out.println("Leave
approved by ProgramManager");
return true;
} else {
return manager.approveLeave(noOfDays);
}
}
}
class Director implements Manager {
private String name;
private Manager manager;
public Director(String name, Manager manager) {
super();
this.name = name;
this.manager = manager;
}
@Override
public boolean approveLeave(int
noOfDays) {
if (noOfDays < 365) {
System.out.println("Leave
approved by Director");
return true;
} else {
return manager.approveLeave(noOfDays);
}
}
}
Test the Chain of Responsibility Pattern
public static void
main(String[] args) {
Director rajaShree = new Director("rajaShree", new
Manager() {
@Override
public boolean approveLeave(int
noOfDays) {
System.out.println("consulting
with Board of Directors");
return false;
}
});
ProgramManager ravindra
= new ProgramManager("Ravindra", rajaShree);
SeniorManager guna = new SeniorManager("guna", ravindra);
ProjLead lead = new ProjLead("PARIKSHIT", guna);
lead.approveLeave(400);
}