点击上方 Java后端 ,选择 设为星标
优质文章,及时送达
作者 | Mazin
来源 | my.oschina.net/u/3441184/blog/889552
责任链设计模式的思想很简单,就是按照链的顺序执行一个个处理方法,链上的每一个任务都持有它后面那个任务的对象引用,以方便自己这段执行完成之后,调用其后面的处理逻辑。
下面是一个责任链设计模式的简单的实现:
public interface Task { public void run(); } public class Task1 implements Task{ private Task task; public Task1() {} public Task1(Task task){ this.task = task; } @Override public void run() { System.out.println("task1 is run"); if(task != null){ task.run(); } } } public class Task2 implements Task{ private Task task; public Task2() {} public Task2(Task task){ this.task = task; } @Override public void run() { System.out.println("task2 is run"); if(task != null){ task.run(); } } } public class Task3 implements Task{ private Task task; public Task3() {} public Task3(Task task){ this.task = task; } @Override public void run() { System.out.println("task3 is run"); if(task != null){ task.run(); } } }
以上代码是模拟了三个任务类,它们都实现了统一个接口,并且它们都一个构造函数,可以在它们初始化的时候就持有另一个任务类的对象引用,以方便该任务调用。
Tips:欢迎关注微信 公众号:Java后端,每日推送 Java 项目技术博 文。
这个和服务器的过滤器有点类似,过滤器的实现也都是实现了同一个接口Filter。
public class LiabilityChain { public void runChain(){ Task task3 = new Task1(); Task task2 = new Task2(task3); Task task1 = new Task3(task2); task1.run(); } }
上面这段代码就是一个任务链对象,它要做的事情很简单,就是将所有要执行的任务都按照指定的顺序串联起来。
public class ChainTest { public static void main(String[] args) { LiabilityChain chain = new LiabilityChain(); chain.runChain(); } }
当我们获取到责任链对象之后,调用其方法,得到以下运行结果:
以上是一个责任链的简单的实现,如果想要深入理解其思想,建议去观察一个过滤器链的执行源码。
作者:Mazin
编辑:id:javastack
https://my.oschina.net/u/3441184/blog/889552
【END】
如果看到这里,说明你喜欢这篇文章,请 转发 、点赞 。微信搜索「web_resource」,关注后回复「进群」或者扫描下方二维码即可进入无广告交流群。
↓ 扫描二维码进群↓
推 荐 阅 读
1. Spring Boot 多模块项目实践
2. MyBatis大揭秘:Plugin 插件设计原理
3. 你知道 Spring Batch 吗?
4. 3 分钟带你彻底搞懂 Java 泛型背后的秘密
5. 团队开发中 Git 最佳实践
喜 欢 文 章 , 点 个 在看