责任链模式Java

首先要明确:用责任链模式的好处就是分工明确,解耦,容易维护

  • 将多个处理流程分散到各个的处理类上,耦合性相对较低。

  • 增加一个具体的处理类,不会影响到其他处理类的代码

责任链模式的缺点:

  • 项目里边会有多个处理类(因为每种处理都抽象为一个类,所以会有多个类)

  • 不好调试,初看代码时不好阅读。

再讲一下常见的责任链模式应用,就是Interceptor拦截器

如果我们要对某个信息进行过滤,一般会选择将过滤逻辑全写在HandlerInterceptor中,如果过滤条件少并且后期改动频率少的话是没什么大问题的

但是如果随着时间推移,有更多的过滤条件要加入进来,此时你就会发现HandlerInterceptor中的密密麻麻一大堆的判断逻辑耦合度实在太高了,很难进行后期的维护,所以基于这种情况责任链模式就登场了

再次明确一下:责任链模式并不能减少增加、删除、更改逻辑时的代码量,其目的只是为了解耦、易于维护、明确各部分责任

改造时,需要向上抽象出一个接口,提供过滤方法

并针对各种过滤逻辑提供对应的接口实现

以下代码代表 一个接口 与 对应的四个过滤实现

public interface Filter {
    // 过滤
    void doFilter(String data);
}

class FilterEgg implements Filter {

    @Override
    public void doFilter(String data) {
        //doSomething
    }
}

class FilterAoBing implements Filter {

    @Override
    public void doFilter(String data) {
        //doSomething
    }
}

class FilterBaiCai implements Filter {

    @Override
    public void doFilter(String data) {
        //doSomething
    }
}

class FilterJiTou implements Filter {

    @Override
    public void doFilter(String data) {
        //doSomething
    }
}

上面这些过滤逻辑的实现可以理解为彼此独立的一小段链条

接下来需要把这些彼此独立的小段链条串起来,形成一个完整的过滤长链就可以了

public class FilterChain {
    List<Filter> filters = new ArrayList<>();

    public FilterChain() {
        filters.add(new FilterEgg());
        filters.add(new FilterAoBing());
        filters.add(new FilterBaiCai());
        filters.add(new FilterJiTou());
    }
    public void processData(String data) {
        for (Filter filter : filters) {
            filter.doFilter(data);
        }
    }
}

如上,类FilterChain作用就是将小段链条串起来,此时FilterChain就代表了过滤链

此时,在HandlerInterceptor中只需要调用FilterChain的过滤方法就可以完成过滤

可以看到责任链模式并不能简化代码的书写,甚至会增加代码量,但是它可以使得各部分分工明确,用来解耦最好不过了,而且这总写法非常的优雅不是吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值