责任链模式
介绍
对于链式结构,将每一个节点看做一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径一次传递给一个节点对象,直至有对象处理这个请求为止,我们将这样一种模式成为责任链模式。
定义
使多个对象都有机会处理请求,从而避免了发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递改请求,直到有对象处理它为止。
使用场景
- 多个对象可以处理同一个请求,但具体由哪个对象处理则在运行时动态决定。
- 在请求处理者不明确的情况下向多个对象中的一个提交一个请求
- 需要动态指定一组对象处理请求
基本程序
- 抽象处理类
public abstract class Handler {
protected Handler nextHandler;//下一节点处理者
public abstract void handle(String condition);//处理函数
}
- 具体处理者1
public class FirstHandler extends Handler {
@Override
public void handle(String condition) {
if (condition.equals("FirstHandler")) {
handle(condition);
} else {
nextHandler.handle(condition);
}
}
}
- 具体处理者2
public class SecondHandler extends Handler {
@Override
public void handle(String condition) {
if (condition.equals("SecondHandler")) {
handle(condition);
} else {
nextHandler.handle(condition);
}
}
}
-
客户类
public class Client { public static void main(String[] args) { FirstHandler firstHandler = new FirstHandler(); SecondHandler secondHandler = new SecondHandler(); firstHandler.nextHandler = secondHandler; secondHandler.nextHandler = firstHandler; firstHandler.handle("SecondHandler"); } }
角色介绍:
- Handler :抽象处理者角色,声明一个请求处理的方法,并在其中保持一个对下一个处理节点的 Handler 对象的引用。
- FirstHandler , SecondHandler : 具体处理者角色,对请求进行处理,如果不能处理则将请求转发给下一个节点处理。
Android 中应用
类似于 Android 中事件的分发处理, 有序广播。
总结
- 优点: 对请求者和处理者关系解耦,提高代码灵活性,
- 缺点:对请求处理者进行遍历影响性能。