责任链模式:

参考:https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

多个动作(Action)相连构成责任链:

public abstract class AbstractAction {
private AbstractAction nextAction;//下一个Action
public AbstractAction(AbstractAction nextAction){
this.nextAction=nextAction;
}
public abstract void doAction();//每个子类重写具体的逻辑操作
public void dothings(){
doAction();//调用完当前层逻辑操作后,尝试调用下一层
if(nextAction!=null){
nextAction.dothings();
}
}
}
具体的Action子类:
public class Action1 extends AbstractAction {
public Action1(AbstractAction nextAction){
super(nextAction);
}
@Override
public void doAction() {
System.out.println("Action1.doAction()");
}
}
public class Action2 extends AbstractAction {
public Action2(AbstractAction nextAction){
super(nextAction);
}
@Override
public void doAction() {
System.out.println("Action2.doAction()");
}
}
使用:
Action2 a2=new Action2((new Action1(null)));
//这里直接使用构造器建立责任链;此外还可以通过set方法建立责任链
a2.dothings();
在这种模式中,通常每个接收者(这里的Action)都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求参数传给下一个接收者,依此类推。注意上面的示例并未体现请求参数

最新文章

  1. php SESSION跨域问题
  2. 那些让IE6-8羞愧的替补型js
  3. Java实现点击一个控件实现删除一个控件的方法
  4. 注入问题0x00
  5. WebService 基础使用&cxf第三方Service使用
  6. 【转】一个非常常见但容易被忽略的c++问题——用IPML模式可以解决
  7. iOS开发之如何修改Mac截屏保存路径
  8. PWM控制led渐变
  9. CSS3鼠标移入移出图片生成随机动画
  10. Configuration配置信息管理
  11. Qt - 设置TableWidget只读
  12. mysql分页pagination
  13. nginx之 nginx + tomcat + redis 负载均衡且session一致性
  14. JavaScript模块化CommonJS/AMD/CMD/UMD/ES6Module的区别
  15. HTML、CSS(小笔记)
  16. linux系统下安装redis以及java调用redis
  17. [Python设计模式] 第12章 基金理财更省事——外观模式
  18. Java Web请求和响应机制
  19. tkinter 打包成exe可执行文件
  20. Singer 学习四 可视化数据操作工具

热门文章

  1. jquery(一:认识jquery、选择器)
  2. 滴水 10/13号完成 打印出DOS PE头 节表 开源
  3. C#后缀表达式解析计算字符串公式
  4. 英国学者在真实世界早期RA队列研究中发现较高比例的临床缓解患者仍存在能量多普勒超声活性
  5. .net redis 发布订阅demo
  6. 把 URL 中文和一堆百分号转换成字符串
  7. IDEA插件Apifox,一键自动生成接口文档!
  8. Oracle中的sql脚本语言中的循环语句介绍
  9. Qt5 CMake项目简单模板
  10. Python 常用笔记