责任链模式的基本设计与实现

责任链的定义

责任链是用一系列类(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);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值