代码
// 定义抽象处理者
abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(Request request) throws BusinessException;
}
// 定义具体处理者
class QuantityHandler extends Handler {
@Override
public void handleRequest(Request request) throws BusinessException {
if (request.getQuantity() > 100) {
throw new BusinessException("权限数量超过上限");
}
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
class RoleHandler extends Handler {
@Override
public void handleRequest(Request request) throws BusinessException {
if (!"admin".equals(request.getRole())) {
throw new BusinessException("操作用户权限不是管理员");
}
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
class TypeHandler extends Handler {
@Override
public void handleRequest(Request request) throws BusinessException {
if (!"department".equals(request.getType()) && !"individual".equals(request.getType())) {
throw new BusinessException("权限类型不是部门或个人权限");
}
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 定义请求
class Request {
private int quantity;
private String role;
private String type;
// getters and setters
}
// 定义业务异常
class BusinessException extends Exception {
public BusinessException(String message) {
super(message);
}
}
业务中调用责任链
//客户端代码
public class Client {
public static void main(String[] args) {
Handler quantityHandler = new QuantityHandler();
Handler roleHandler = new RoleHandler();
Handler typeHandler = new TypeHandler();
quantityHandler.setNextHandler(roleHandler);
roleHandler.setNextHandler(typeHandler);
Request request = new Request();
// set request properties
try {
quantityHandler.handleRequest(request);
} catch (BusinessException e) {
e.printStackTrace();
}
}
}