目录
本文参考:《大话设计模式》——程杰
责任链模式 ChainOfResponsibility
概念:
使多个请求都机会能处理请求,减少 请求发送者 与 接受者 的耦合。处理请求的对象连成一条链并传递请求,直到有一个对象处理它为止。
优点:
降低耦合
随时增加或者修改请求
增强对象指派责任的灵活性
缺点:
请求不一定被处理。
案例应用:
工作流的申请,需要不同权限的领导批准
UML图
代码:
abstract class Manager {
private Manager superior;
private String name;
public Manager(String name) {
this.name = name;
}
public Manager() {
}
public Manager getSuperior() {
return superior;
}
//核心--设置上级
public void setSuperior(Manager superior) {
this.superior = superior;
}
//请求处理
abstract public void RequestApplications(Request request);
}
_______________________________________________________________________________
//majordomo总监,其余管理类似,只是判断条件不同
public class Majordomo extends Manager {
private String name;
public Majordomo(String name) {
super();
this.name = name;
}
@Override
public void RequestApplications(Request request) {
if("请假" == request.RequestType && request.Number <= 5){
System.out.println( request.RequestContent + request.RequestType + request.Number + "被"+ name +"批准");
}else {
if(getSuperior() != null) {
//设置上级,将不能处理的请求传给上级
getSuperior().RequestApplications(request);
}
}
}
}
_______________________________________________________________________________
public class Main {
public static void main(String[] args){
Majordomo majordomo = new Majordomo("主管");
CommonManager commonManager = new CommonManager("总监");
GeneralManager generalManager = new GeneralManager("总裁");
majordomo.setSuperior(commonManager);
commonManager.setSuperior(generalManager);
Request request = new Request();
request.RequestType="请假";
request.RequestContent="小明";
request.Number = 4;
majordomo.RequestApplications(request);
Request request1 = new Request();
request1.RequestType="加薪";
request1.RequestContent="小红";
request1.Number = 600;
majordomo.RequestApplications(request1);
}
}