// --- 链表形式调用 --- netty 就是类似的这种形式
public class PipelineDemo {
/**
* 初始化的时候造一个 head,作为责任链的开始,但是并没有具体处理
*/
public HandlerChainContext head = new HandlerChainContext(new AbstractHandler() {
@Override
void doHandler(HandlerChainContext handlerChanContext, Object arg0) {
handlerChanContext.runNext(arg0);
}
});
public void addLast(AbstractHandler handler) {
HandlerChainContext context = head;
while (context.next != null) {
context = context.next;
}
context.next = new HandlerChainContext(handler);
}
public void requestProcess(Object arg0) {
this.head.handler(arg0);
}
public static void main(String[] args) {
PipelineDemo piplineDemo = new PipelineDemo();
piplineDemo.addLast(new Handler2());
piplineDemo.addLast(new Handler1());
piplineDemo.addLast(new Handler1());
piplineDemo.addLast(new Handler2());
piplineDemo.requestProcess("火车呜呜呜~~");
}
}
/**
* handler 上下文,主要维护链和链的执行
*/
class HandlerChainContext {
HandlerChainContext next; // 下一个节点
AbstractHandler handler;
public HandlerChainContext(AbstractHandler handler) {
this.handler = handler;
}
void handler(Object arg0) {
this.handler.doHandler(this, arg0);
}
// 继续执行下一个
void runNext(Object arg0) {
if (this.next != null) {
this.next.handler(arg0);
}
}
}
/**
* 处理器抽象类
*/
abstract class AbstractHandler {
/**
* 处理器,这个处理器就做一件事情,在传入的字符串中增加一个尾巴。
*/
abstract void doHandler(HandlerChainContext handlerChanContext, Object arg0); // handler 方法
}
// 处理器具体实现类
class Handler1 extends AbstractHandler {
@Override
void doHandler(HandlerChainContext handlerChainContext, Object arg0) {
arg0 = arg0.toString() + ".. handler1 的小尾巴 .....";
System.out.println("我是 Handler1 的实例,我在处理:" + arg0);
// 继续执行下一个
handlerChainContext.runNext(arg0);
}
}
// 处理器具体实现类
class Handler2 extends AbstractHandler {
@Override
void doHandler(HandlerChainContext handlerChainContext, Object arg0) {
arg0 = arg0.toString() + ".. handler2 的小尾巴 .....";
System.out.println("我是 Handler2 的实例,我在处理:" + arg0);
// 继续执行下一个
handlerChainContext.runNext(arg0);
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有