Sunday, 29 September 2013

Chain of responsibility pattern

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);


      }

1 comment:

  1. package dp;

    public abstract class Approver {
    Approver approver;
    String name;
    abstract boolean approveLeave(int i);
    }

    class Manager extends Approver {

    @Override
    public boolean approveLeave(int i) {
    if (i < 2) {
    System.out.println("approved by Manager");
    return true;
    } else {
    return approver.approveLeave(i);
    }

    }
    }

    class SeniorManager extends Approver {

    @Override
    public boolean approveLeave(int i) {
    if (i < 10) {
    System.out.println("approved by SeniorManager");
    return true;
    } else {
    return approver.approveLeave(i);
    }

    }
    }

    class CEO extends Approver {

    @Override
    public boolean approveLeave(int i) {
    if (i < 50) {
    System.out.println("approved by CEO");
    return true;
    } else {
    return false;
    }

    }
    }

    public static void main(String[] args) {

    CEO ceo = new CEO();
    ceo.setName("ashok");

    SeniorManager sm = new SeniorManager();
    sm.setName("guna");
    sm.setApprover(ceo);

    Manager manager = new Manager();
    manager.setName("Kartik");
    manager.setApprover(sm);

    manager.approveLeave(45);



    }

    ReplyDelete