Chain of Responsibility
- Decoupling sender from receiver
- Promote loose coupling
Example
This example pass a request to be approved and validate if that position can approve it or need to be passed to the next level.
Main
public static void main(String[] args) {
Manager m = new Manager();
Director d = new Director();
CEO c = new CEO();
m.setSuccesor(d);
d.setSuccesor(c);
Request r1 = new Request(1, 500);
m.handleRequest(r1);
Request r2 = new Request(2, 500);
m.handleRequest(r2);
}
public static void main(String[] args) {
Manager m = new Manager();
Director d = new Director();
CEO c = new CEO();
m.setSuccesor(d);
d.setSuccesor(c);
Request r1 = new Request(1, 500);
m.handleRequest(r1);
Request r2 = new Request(2, 500);
m.handleRequest(r2);
}
Handle
public abstract class Handler {protected Handler succesor;public void setSuccesor(Handler succesor){this.succesor = succesor;}public abstract void handleRequest(Request r);}
Request
public class Request {private int requestType;private int amount;public Request(int requestType, int amount){this.requestType = requestType;this.amount = amount;}public int getRequestType() {return requestType;}public double getAmount() {return amount;}}
Manager
public class Manager extends Handler {@Overridepublic void handleRequest(Request r) {if(r.getRequestType() == 3){System.out.println(" Manager can approve this request");}else{succesor.handleRequest(r);}}}
Director
public class Director extends Handler {@Overridepublic void handleRequest(Request r) {if(r.getRequestType() == 2){System.out.println(" Director can approve this request");}else{succesor.handleRequest(r);}}}
CEO
public class CEO extends Handler {@Overridepublic void handleRequest(Request r) {System.out.println("CEO can approve everything");}}
Comentarios
Publicar un comentario