设计模式之过滤链模式

过滤链可以对对象进行一系列的步骤处理/过滤,把处理的步骤解耦一个个小的部分,

主要有三个角色,

1.抽象的过滤类,负责定义过滤器的实现接口,具体的实现还要具体过滤器角色去参与。

2.具体的过滤类,负责具体筛选规则的逻辑实现,最后再返回被处理的对象

3.被处理的对象,   具体过滤器角色中可以对指定感兴趣的目标进行处理,也可以统一处理

抽象的过滤方法

@FunctionalInterface
public interface Handle {
    /**
     * 过滤的抽象方法
     */
    String handle(String source);
}

具体的过滤器

public class LowerCaseHandle implements Handle {
    @Override
    public String handle(String source) {
        return source.toLowerCase();
    }
}


public class ReplaceAllHandle implements Handle {
    private String regex;
    private String target;

    public ReplaceAllHandle(String regex, String target) {
        this.regex = regex;
        this.target = target;
    }

    @Override
    public String handle(String source) {
        return source.replaceAll(regex, target);
    }
}


public class UpperCaseHandle implements Handle {
    @Override
    public String handle(String source) {
        return source.toUpperCase();
    }
}

过滤链

public class InChainHandle implements Handle {
   private final List<Handle> handleList=new ArrayList<>();

   public InChainHandle addHandler(Handle handle){
       this.handleList.add(handle);
       return this;
   }

    @Override
    public String handle(String source) {
        for (Handle handle : handleList) {
           source=handle.handle(source);
        }
        return source;
    }

 public static void main(String[] args) {
        InChainHandle chainHandle=new InChainHandle()
                .addHandler(new LowerCaseHandle())
                .addHandler(new ReplaceAllHandle("fuck","love"))
                .addHandler(new UpperCaseHandle());
                ;
        String res = chainHandle.handle("fuck This worLd");
        System.out.println(res);
    }
}

过滤链的好处就是把过滤的功能解耦成一个个小的过滤器,通过组合的形式来确定处理的流程,这种设计模式在mybatis(拦截器链)、netty(channalHandler)、tomcat(filter)等等均有体现。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值