ChainofResponsibility Pattern
2024-10-21 11:38:40
责任链模式:
参考: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)都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求参数传给下一个接收者,依此类推。注意上面的示例并未体现请求参数
最新文章
- php SESSION跨域问题
- 那些让IE6-8羞愧的替补型js
- Java实现点击一个控件实现删除一个控件的方法
- 注入问题0x00
- WebService 基础使用&;cxf第三方Service使用
- 【转】一个非常常见但容易被忽略的c++问题——用IPML模式可以解决
- iOS开发之如何修改Mac截屏保存路径
- PWM控制led渐变
- CSS3鼠标移入移出图片生成随机动画
- Configuration配置信息管理
- Qt - 设置TableWidget只读
- mysql分页pagination
- nginx之 nginx + tomcat + redis 负载均衡且session一致性
- JavaScript模块化CommonJS/AMD/CMD/UMD/ES6Module的区别
- HTML、CSS(小笔记)
- linux系统下安装redis以及java调用redis
- [Python设计模式] 第12章 基金理财更省事——外观模式
- Java Web请求和响应机制
- tkinter 打包成exe可执行文件
- Singer 学习四 可视化数据操作工具