public void next(ChainHandler next) { this.next = next; } public abstract void doHandler (Member member) { System.out.println("第一个关口"); next.doHandler(member); } } public class SecondChain extends ChainHandler { @Override public void doHandler(Member member) { System.out.println("第二个关口"); next.doHandler(member); } } public class ThirdChain extends ChainHandler { @Override public void doHandler(Member member) { System.out.println("
HandlerChainContext head = new HandlerChainContext(new AbstractHandler() { @Override void doHandler handler) { this.handler = handler; } void handler(Object arg0) { this.handler.doHandler */ abstract void doHandler(HandlerChainContext handlerChanContext, Object arg0); // handler 方法 } // 处理器具体实现类 class Handler1 extends AbstractHandler { @Override void doHandler(HandlerChainContext handlerChainContext.runNext(arg0); } } // 处理器具体实现类 class Handler2 extends AbstractHandler { @Override void doHandler
热卖云产品年终特惠,2核2G轻量应用服务器7.33元/月起,更多上云必备产品助力您轻松上云
size) { //注意对pos的处理 Handler handler = handlers.get(pos++); handler.doHandler */ void doHandler(RequestSource requestSource,HandlerChain handlerChain); } // 其中一个实现 public class HeaderHandler implements Handler { @Override public void doHandler(RequestSource requestSource * * @param requestSource the request source */ void doHandler(RequestSource requestSource = null) { next.doHandler(requestSource); } } } 总结 责任链模式在各种常见框架中非常常见。
伪代码示例: // *** 集合形式存储 类似tomcat中的filters *** // 处理器抽象类 class AbstractHandler{void doHandler(Object arg0 handler2, handler3); // 处理请求,调用处理器 void process(request){ for(handler in handlers){ handler.doHandler // *** 链表形式调用 netty中的用法 *** // 处理器抽象类 class AbstractHandler{ AbstractHandler next;//下一节点 void doHandler = null){ handler.doHandler(request); handler = handler.next; } } 链表形式的责任链实现的具体代码示例: // 链表形式调用 new HandlerChainContext( new AbstractHandler() { @Override void doHandler
HandlerChainContext head = new HandlerChainContext(new AbstractHandler() { @Override void doHandler handler) { this.handler = handler; } void handler(Object arg0) { this.handler.doHandler abstract class AbstractHandler { /** * 处理器,这个处理器就做一件事情,在传入的字符串中增加一个尾巴.. */ abstract void doHandler arg0); // handler方法 } // 处理器具体实现类 class Handler1 extends AbstractHandler { @Override void doHandler handlerChainContext.runNext(arg0); } } // 处理器具体实现类 class Handler2 extends AbstractHandler { @Override void doHandler
null) { pool = poolResources.selectOrCreate(remote, options, doHandler ())); } ContextHandler<SocketChannel> contextHandler = doHandler Channel放回deque中 使用三个参数的构造器创建的SimpleChannelPool,其releaseHealthCheck值为true,即释放的时候进行health check TcpClient.doHandler * * @return a new {@link ContextHandler} */ protected ContextHandler<SocketChannel> doHandler 的时候pool为null,创建的是ClientContextHandler;等pool创建好了,第二次调用doHandler的时候,pool不为null,创建的是PooledClientContextHandler
version 1.0 * @date 2022/10/25 13:41 * @description */ public interface RequestHandler { void doHandler @description */ public class AHandler extends BaseRequestHandler { @Override public void doHandler = null) { next.doHandler(req); } } } 当然还有具体的处理类B、C等等,这里不展开赘述。 BHandler(); BaseRequestHandler c = new CHandler(); a.next(b); b.next(c); a.doHandler
BaseHTTPRequestHandler,HTTPServer HTTP_PORT = 8081 # This class will handles any incoming request class doHandler a http server and define the handler to manage the request server = HTTPServer(('', HTTP_PORT), doHandler
将上面的代码优化后变为: @Autowiredprivate DataScopeContext dataScopeContext;// 根据数据权限范围查询直接通过同一个dohandler方法根据不同的
com.java3y.austin.handler.deduplication.service.AbstractDeduplicationService#deduplication 模板方法模式的代码2:com.java3y.austin.handler.handler.BaseHandler#doHandler
class HandlerPipeline { private HandlerContext head = new HandlerContext(new Handler(){ void doHandler = null){ this.next.handler(val); } } void handler(Object val){ this.handler.doHandler (this, val); } } // handler处理器 interface Handler{ void doHandler(HandlerContext context, Object val); } class HandlerTest implements Handler{ public void doHandler(HandlerContext context, Object
null) { pool = poolResources.selectOrCreate(remote, options, doHandler ())); } ContextHandler<SocketChannel> contextHandler = doHandler
扫码关注腾讯云开发者
领取腾讯云代金券