All of my blog

java设计模式之责任链模式

目录

一、责任链模式(Chain of Responsibility Pattern)

二、demo:

三、项目地址


一、责任链模式(Chain of Responsibility Pattern)

有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。这就有点类似我们在java程序上的递归方法
         (web应该中学习到的Filter其实就是一个责任链设计模式)

 

二、demo:

定义一个接口

/**
 * Created by yjl on 2020/11/29.
* 责任链模式:博文介绍链接:https://blog.csdn.net/qq_27471405/article/details/110340571
* 公众号:灵儿的笔记
 */
public interface Filter {

    public void handler();
}

 

定义一个实现类,实现类里实现调用的传递

/**
 * Created by yjl on 2020/11/29.
 * 责任链模式:博文介绍链接:https://blog.csdn.net/qq_27471405/article/details/110340571
 */
public class AFilter implements Filter{
    private String name;
    private Filter filter;

    public AFilter() {
    }

    public AFilter(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Filter getFilter() {
        return filter;
    }

    public void setFilter(Filter filter) {
        this.filter = filter;
    }

    @Override
    public void handler() {
        System.out.println("name="+name);
        if(getFilter()!=null){
            getFilter().handler();

        }

    }
}

 

最后,在测试类上调用

/**
 * Created by yjl on 2020/11/29.
 * 责任链模式:博文介绍链接:https://blog.csdn.net/qq_27471405/article/details/110340571
 */
public class TestFilter {

    public static void main(String[] args) {
        AFilter a1= new AFilter("a1");
        AFilter b1 = new AFilter("b1");
        AFilter c1 = new AFilter("c1");


        a1.setFilter(b1);
        b1.setFilter(c1);

        a1.handler();
    }
}

 

运行结果:

 

三、项目地址

https://github.com/jalenFish/design-patterns/tree/master/src/main/java/cn/zygxsq/design/module/ChainResponsibilityPattern

posted @ 2020-11-29 17:46  小小鱼儿小小林  阅读(94)  评论(0编辑  收藏  举报