介绍
Java责任链(Chain of Responsibility)设计模式是指很多处理对象构成一个链,链中前一个对象指向后一个对象。请求在链中传递,一个请求可以被一个或者多个对象处理。调用方(即客户端)不知道请求会被链中的哪个对象处理,所以责任链模式可以方便组织责任链而不影响调用方。
责任链模式一般定义抽象类或者接口来规范行为,而定义具体类实现具体的处理逻辑。
示例
示例1:Netty中的handler就构成了责任链模式
注:下面图拷贝自Netty的ChannelPipeline API中的图
文章来源:https://www.toymoban.com/news/detail-573473.html
示例2:一个简单的责任链模式代码示例
package com.thb;
// 定义一个抽象类,规范行为
public abstract class AbstractHandler {
private AbstractHandler nextHandler; // 指向下一个处理器
private char startWith;
public AbstractHandler(char startWith) {
this.startWith = startWith;
}
// 处理逻辑的抽象方法
public abstract void handleMessage(String msg);
// 设置下一个处理器
public void setNextHandler(AbstractHandler nextHandler) {
this.nextHandler = nextHandler;
}
// 取出下一个处理器
public AbstractHandler getNextHandler() {
return this.nextHandler;
}
}
// 定义具体类,实现真正的处理逻辑
package com.thb;
public class Handler extends AbstractHandler {
public Handler(char startWith) {
super(startWith);
}
@Override
public void handleMessage(String msg) {
// 具体处理逻辑
if (msg.startsWith("H")) {
System.out.println("process the message");
} else {
if (getNextHandler() != null) {
getNextHandler().handleMessage(msg);
} else {
System.out.println("no suitable hander");
}
}
}
}
// 定义一个客户端来模拟调用
package com.thb;
public class Test2 {
public static void main(String[] args) {
AbstractHandler handler1 = new Handler('a');
AbstractHandler handler2 = new Handler('H');
AbstractHandler handler3 = new Handler('c');
handler1.setNextHandler(handler2);
handler2.setNextHandler(handler3);
String msg = "Hello";
handler1.handleMessage(msg);
msg = "world";
handler1.handleMessage(msg);
}
}
输出结果:
文章来源地址https://www.toymoban.com/news/detail-573473.html
到了这里,关于Java设计模式-责任链(Chain of Responsibility)模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!