责任链模式

定义

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

责任链模式的重点在“链上”,由一条链去处理相似的请求,在链中决定谁来处理这个请求,并返回相应的结果。

角色

抽象处理者(Handler)角色:该角色对请求进行抽象,并定义一个方法来设定和返回对下一个处理者的引用。

具体处理者(Concrete Handler):该角色接到请求后,可以选择将请求处理掉,或者将请求传给下一个处理者。由于具体处理者持有对下一个处理者的引用,因此,如果需要,处理者可以访问下一个处理者。

/**
*	实现处理接口
**/
public interface BaseCase {
    void doSomething(String input,BaseCase baseCase);
}
/**
 * 责任链基类
 */
public class BaseChain implements BaseCase {

    private List<BaseCase> caseList = new ArrayList<>();

    public BaseChain addChain(BaseCase chain) {
        caseList.add(chain);
        return this;
    }

    private int index = 0;

    @Override
    public void doSomething(String input,BaseCase baseCase) {
        if (index == caseList.size()) {
            return;
        }
        BaseCase currentCase = caseList.get(index);
        index++;
        currentCase.doSomething(input, this);
    }
}
/**
*	处理类一
**/
public class OneCase implements BaseCase {
    @Override
    public void doSomething(String input, BaseCase baseCase) {
        if ("1".equals(input)) {
            System.out.println("do oneCase things");
            return;
        }
        baseCase.doSomething(input, baseCase);
    }
}
/**
*	处理类二
**/
public class TwoCase implements BaseCase {
    @Override
    public void doSomething(String input, BaseCase baseCase) {
        if ("2".equals(input)) {
            System.out.println("do twoCase things");
            return;
        }
        baseCase.doSomething(input, baseCase);
    }
}
/**
*	默认责任链处理类
**/
public class DefaultCase implements BaseCase {
    @Override
    public void doSomething(String input, BaseCase baseCase) {

            System.out.println("do default things");
            return;

    }
}
/**
*	测试类
**/
public class ModelChainTest {
    public static void main(String[] args) {
        BaseChain baseChain = new BaseChain();
        baseChain.addChain(new OneCase()).addChain(new TwoCase()).addChain(new DefaultCase());
        baseChain.doSomething("2", baseChain);
    }
}

优点

责任链模式将请求和处理分开,请求者不知道是谁处理的,处理者可以不用知道请求的全貌。
提高系统的灵活性。

缺点

降低程序的性能。每个请求都是从链头遍历到链尾,当链比较长的时候,性能会大幅下降
不易于调试。由于该模式采用了类似递归的方式,调试的时候逻辑比较复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值