404网站怎么做,市场推广方案怎么做,百度seo推广软件,wordpress设置专题页介绍
Java责任链#xff08;Chain of Responsibility#xff09;设计模式是指很多处理对象构成一个链#xff0c;链中前一个对象指向后一个对象。请求在链中传递#xff0c;一个请求可以被一个或者多个对象处理。调用方#xff08;即客户端#xff09;不知道请求会被链中…介绍
Java责任链Chain of Responsibility设计模式是指很多处理对象构成一个链链中前一个对象指向后一个对象。请求在链中传递一个请求可以被一个或者多个对象处理。调用方即客户端不知道请求会被链中的哪个对象处理所以责任链模式可以方便组织责任链而不影响调用方。 责任链模式一般定义抽象类或者接口来规范行为而定义具体类实现具体的处理逻辑。
示例
示例1Netty中的handler就构成了责任链模式
注下面图拷贝自Netty的ChannelPipeline API中的图
示例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);}Overridepublic 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);}}输出结果