常用设计模式-责任链模式

责任链模式定义

多个对象都有机会处理请求,从而避免发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传送这个请求,直到有一个对象处理他为止。

码云地址地址:design_patterns

优点

	1.把复杂功能拆分处理,让每个类只是负责一个处理逻辑。复用性更好,组合更加灵活。
	2.请求和处理类分开,实现低耦合,更加利于扩展。

缺点

1.责任链太长或者每条链判断处理的时间太长会影响性能。特别是递归循环的时候。
2.不一定被处理,每个职责类的职责很明确,这就需要对写默认的处理了。

责任链模式重要的两点:分离职责,动态组合

处理者接口

public interface Handler<T>{
	//责任链需要处理方法
	void doAny(T t);
	//判断执行状态方法
	Boolean isOk(T t);
}

责任链抽象类, 负责维护链状态和执行链方法

public abstract class HandlerContext implements Handler<Integer>{

    private HandlerContext nextHandler;

	//设置下一个处理类
    public HandlerContext setNext(HandlerContext nexHandler){
        this.nextHandler = nexHandler;
        return nextHandler;
    }

	//递归调用处理方法
    public void executor(Integer integer) {
        if (isOk(integer)){
            doAny(integer);
        }
        if (nextHandler != null){
            nextHandler.executor(integer);
        }
    }
}

请求处理者1

public class HandlerImpl extends HandlerContext {

    @Override
    public void doAny(Integer t) {
        System.out.println("结果1:" + t);
    }

    @Override
    public Boolean isOk(Integer integer) {
        System.out.println("执行1");
        return integer == 1;
    }
}

请求处理者2

public class HandlerImpl2 extends HandlerContext {

    @Override
    public void doAny(Integer t) {
        System.out.println("结果2:" + t);
    }

    @Override
    public Boolean isOk(Integer integer) {
        System.out.println("执行2");
        return integer == 2;
    }
}

请求处理者3

public class HandlerImpl3 extends HandlerContext {

    @Override
    public void doAny(Integer t) {
        System.out.println("结果3:" + t);
    }

    @Override
    public Boolean isOk(Integer integer) {
        System.out.println("执行3");
        return integer == 3;
    }
}

测试类

public class Test {
    public static void main(String[] args) {

        HandlerContext handlerContext = new HandlerImpl();
        HandlerContext handlerContext2 = new HandlerImpl2();
        HandlerContext handlerContext3 = new HandlerImpl3();
        handlerContext.setNext(handlerContext2)
                .setNext(handlerContext3);
        handlerContext.executor(2);
    }
}

执行结果

执行1
执行2
结果2:2
执行3

本文部分定义参考了网上博文和网上信息…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值