【设计模式】责任链模式学习

责任链模式,顾名思义,就是将需要实现的功能,拆分为各自专一的责任,组成一条责任链,来完成对数据的处理。

先看下面一段demo

需要被处理的对象类

@Data
public class User {

    private String name;

    private int age;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

责任处理器接口

public interface Filter {
    void doFilter(User target, Chain chain);
}

责任处理器的两个接口

public class FirstFilter implements Filter {
    @Override
    public void doFilter(User user, Chain chain) {
        //此处对需要处理的对象进行处理,完成自己的责任,完成之后还需要传给责任链中的下一位
        user.setAge(1);
        System.out.println("经过第一个处理器");

        chain.doFilter(user);
    }
}


public class SecondFilter implements Filter {
    @Override
    public void doFilter(User user, Chain chain) {
        //实现自己的责任
        user.setName("jungle");
        System.out.println("经过第二个处理器");
        //传递
        chain.doFilter(user);
    }
}

责任链接口

public interface Chain {

    void doFilter(User target);
}

责任链实现类

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

    private int pos = 0;

    public FilterChain() {
        filters.add(new FirstFilter());
        filters.add(new SecondFilter());
    }

    @Override
    public void doFilter(User user) {
        if (pos < filters.size()){
            Filter filter = filters.get(pos++);
            filter.doFilter(user, this);
        }
    }

    public static void main(String[] args) {
        User user = new User();
        new FilterChain().doFilter(user);
        System.out.println(user);
    }
}

运行结果

经过第一个处理器
经过第二个处理器
User{name='jungle', age=1}

以上责任链主要实现了两个功能,第一个处理器对user对象的年龄进行处理,第二个处理器对user对象的名字进行处理,可以看到,在对象走完整个责任链之后,对象的属性被初始化,整个责任链完成了自己的责任。在整个链中,每个处理器只需要完成自己负责的逻辑,完成之后便像工厂流水线一样传递到下一个处理器中,遵循了软件中高内聚,低耦合的思想,是一种非常经典的设计模式,一个非常经典的案例便是web应用服务器中的过滤器(Filter)。

tomcat中的责任链,我们常说的过滤器,即是使用的责任链设计模式,主要负责处理解析出来的request和response对象
接口
在这里插入图片描述
链的实现类
在这里插入图片描述
在这里插入图片描述

责任链处理完之后,抛个sevlet执行业务
在这里插入图片描述
以上便是责任链模式的所有内容,希望各位看完之后能有所收获。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值