责任链的定义
责任链是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。
责任链的优缺点
优点
降低耦合度。它将请求的发送者和接收者解耦
简化了对象,使得对象不需要知道链的结构
增强给对象指派职责的灵活性,允许动态地新增或者删除责任链
增加新的请求处理类方便
缺点
不能保证请求一定被接收;
系统性能将受到一定影响,调试时不方便,可能会造成循环调用
简单的责任链的实现
创建请求基类,后续待具体的实现类继承;
/**
* 实现类的父类
* @version
*/
public interface ValidatorHanlder {
/**
* 处理请求
* @param params
*/
void process(Object params);
}
创建chain
/**
* chain模板实现
* @time 2020年3月23日 下午2:00:28
*/
public abstract class PCValidatorHanlder implements ValidatorHanlder{
protected PCValidatorHanlder nextValidatorHanlder;
public void setNext(PCValidatorHanlder nextValidatorHanlder) {
this.nextValidatorHanlder = nextValidatorHanlder;
}
/**
* 串行处理
* @param params
*/
@Override
public void process(Object params) {
subProcess(params);
if(nextValidatorHanlder == null) return;
nextValidatorHanlder.process(params);
}
/**
* 真实处理
* @param params
*/
protected abstract void subProcess(Object params) ;
}
创建责任链执行类
/**
*
* 校验cbs引用的执行类
* @time 2020年3月25日 下午2:30:02
*/
public class ValidatorExecute {
/**
* 维护串行关系
* @return
*/
private PCValidatorHanlder initHandler() {
BValidator bValidator = new BValidator();
CValidator cValidator = new CValidator();
MValidator mValidator = new MValidator();
bValidator.setNext(cValidator);
cValidator.setNext(mValidator);
return bValidator;
}
/**
* 调用请求
* @param request
*/
public void dochain(Object request) {
if(request == null) return ;
initHandler().process(request);
}
}
添加具体的实现类
/**
* BValidator
* @time 2020年3月23日 下午2:03:15
*/
public class BValidator extends PCValidatorHanlder{
@Override
protected void subProcess(Object params) {
System.out.println("BValidator ,params = "+params);
}
}
/**
* CValidator
* @time 2020年3月23日 下午2:03:15
*/
public class CValidator extends PCValidatorHanlder{
@Override
protected void subProcess(Object params) throws BusinessException {
System.out.println("CValidator ,params = "+params);
}
}
/**
* MValidator
* @time 2020年3月23日 下午2:03:15
*/
public class MValidator extends PCValidatorHanlder{
@Override
protected void subProcess(Object params) throws BusinessException {
System.out.println("MValidator ,params = "+params);
}
}
执行类的调用
new ProjectCBSValidatorExecute().dochain(pk_project);