博兴县建设局网站,在淘宝上的毕设网站代做,华龙网重庆,摄影网页设计说明责任链模式的定义是#xff1a;使多个对象都有机会处理请求#xff0c;从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链#xff0c;并沿着这条链传递该请求#xff0c;直到有对象处理它为止。
责任链模式适合于请求需要经过多个处理器#xff0c;并…责任链模式的定义是使多个对象都有机会处理请求从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链并沿着这条链传递该请求直到有对象处理它为止。
责任链模式适合于请求需要经过多个处理器并被其中一个或多个处理器执行。 #mermaid-svg-sDTWUhjGeU6etreo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sDTWUhjGeU6etreo .error-icon{fill:#552222;}#mermaid-svg-sDTWUhjGeU6etreo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-sDTWUhjGeU6etreo .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-sDTWUhjGeU6etreo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-sDTWUhjGeU6etreo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-sDTWUhjGeU6etreo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-sDTWUhjGeU6etreo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-sDTWUhjGeU6etreo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-sDTWUhjGeU6etreo .marker.cross{stroke:#333333;}#mermaid-svg-sDTWUhjGeU6etreo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-sDTWUhjGeU6etreo g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-sDTWUhjGeU6etreo g.classGroup text .title{font-weight:bolder;}#mermaid-svg-sDTWUhjGeU6etreo .nodeLabel,#mermaid-svg-sDTWUhjGeU6etreo .edgeLabel{color:#131300;}#mermaid-svg-sDTWUhjGeU6etreo .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-sDTWUhjGeU6etreo .label text{fill:#131300;}#mermaid-svg-sDTWUhjGeU6etreo .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-sDTWUhjGeU6etreo .classTitle{font-weight:bolder;}#mermaid-svg-sDTWUhjGeU6etreo .node rect,#mermaid-svg-sDTWUhjGeU6etreo .node circle,#mermaid-svg-sDTWUhjGeU6etreo .node ellipse,#mermaid-svg-sDTWUhjGeU6etreo .node polygon,#mermaid-svg-sDTWUhjGeU6etreo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-sDTWUhjGeU6etreo .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-sDTWUhjGeU6etreo g.clickable{cursor:pointer;}#mermaid-svg-sDTWUhjGeU6etreo g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-sDTWUhjGeU6etreo g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-sDTWUhjGeU6etreo .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-sDTWUhjGeU6etreo .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-sDTWUhjGeU6etreo .dashed-line{stroke-dasharray:3;}#mermaid-svg-sDTWUhjGeU6etreo #compositionStart,#mermaid-svg-sDTWUhjGeU6etreo .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo #compositionEnd,#mermaid-svg-sDTWUhjGeU6etreo .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo #dependencyStart,#mermaid-svg-sDTWUhjGeU6etreo .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo #dependencyStart,#mermaid-svg-sDTWUhjGeU6etreo .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo #extensionStart,#mermaid-svg-sDTWUhjGeU6etreo .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo #extensionEnd,#mermaid-svg-sDTWUhjGeU6etreo .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo #aggregationStart,#mermaid-svg-sDTWUhjGeU6etreo .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo #aggregationEnd,#mermaid-svg-sDTWUhjGeU6etreo .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-sDTWUhjGeU6etreo .edgeTerminals{font-size:11px;}#mermaid-svg-sDTWUhjGeU6etreo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} «interface» Handler setNext(Handler) handler(Request) ConcreteHandler next:Handler setNext(Handler) handler(Request) 代码实现
// 抽象处理器
public abstract class Handler { private Handler next; // 初始化处理链 public static Handler init(Handler... handlers) { Handler first handlers[0]; for (int i 1; i handlers.length; i) { first.setNext(handlers[i]); first handlers[i]; } return handlers[0]; } public void setNext(Handler handler) { next handler; } // 处理当前请求 public abstract void handle(Request request); //处理下一个请求 protected void nextHandle(Request request) { if (next ! null) { next.handle(request); } }
}public class HandlerA extends Handler { Override public void handle(Request request) { request.addName(HandlerA); nextHandle(request); }
}public class HandlerB extends Handler { Override public void handle(Request request) { request.addName(HandlerB); nextHandle(request); }
}// 请求
Data
public class Request { private final ListString names new ArrayList(); public void addName(String name) { names.add(name); }
}public static void main(String[] args) { Handler handler Handler.init(new HandlerA(), new HandlerB()); Request request new Request(); handler.handle(request); System.out.println(request.getNames());
} 上面的例子跟链表相像一个处理器保持有下一个处理器的引用。
另一种实现变体是处理器的引用统一由处理器链管理处理器链决定处理的顺序。
public interface Handler { void handle(Request request,HandlerChain chain);
}public class HandlerA implements Handler{ Override public void handle(Request request, HandlerChain chain) { request.addName(HandlerA); chain.handle(request); }
}public class HandlerB implements Handler{ Override public void handle(Request request, HandlerChain chain) { request.addName(HandlerB); chain.handle(request); }
}public class HandlerChain { private ListHandler handlers new ArrayList(); // 当前指针 int cur0; public void addHandler(Handler handler) { handlers.add(handler); } public void handle(Request request){ if(curhandlers.size()){ return; } Handler handler handlers.get(cur); handler.handle(request, this); }
}public static void main(String[] args) { HandlerChain chainnew HandlerChain(); chain.addHandler(new HandlerA()); chain.addHandler(new HandlerB()); Request requestnew Request(); chain.handle(request); System.out.println(request.getNames());
}责任链变化的地方是处理的流程。
优点是
处理的顺序可以随时修改方便新增或删除处理者