【设计模式】15.职责链模式
职责链模式
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
结构图:
例:
public abstract class Manager { // Handler(管理者) protected Manager superior; // 上级(Successor) public void setSuperior(Manager superior) { this.superior = superior; } abstract public void handleRequest(String request,int days); }
public class CommonManager extends Manager { // ConcreteHandler(经理) @Override public void handleRequest(String request,int days) { if(request.equals("请假") && days<=3){ // 3天以内的请假经理可以批准 System.out.println(days+"天的请假在经理处被批准"); }else if(request.equals("请假") && days>3 && days<=7 ){ // 4-7天的请假需上级总经理批准 superior.handleRequest(request,days); } } }
public class GeneralManager extends Manager { // ConcreteHandler(总经理) @Override public void handleRequest(String request, int days) { if(request.equals("请假") && days<7){ // 4-7天以内的请假总经理可以批准 System.out.println(days+"天的请假在总经理处被批准"); }else if(request.equals("请假") && days>7){ // 超过7天的不批准(职责链到此结束) System.out.println(days+"天的请假不可以批准"); } } }
public class Test { public static void main(String[] args) { CommonManager commonManager = new CommonManager(); // 经理 GeneralManager generalManager = new GeneralManager(); // 总经理 commonManager.setSuperior(generalManager); // 设置上级 commonManager.handleRequest("请假",3); // 向经理请假 commonManager.handleRequest("请假",5); // 向经理请假 } }
输出:
3天的请假在经理处被批准
5天的请假在总经理处被批准