网站底部代码下载,上海长宁网站建设,做网站的软件初中生,论坛搭建一键java 职责链模式当应有几个处理器来执行某项操作并为这些处理器定义特定顺序时#xff0c;就需要采用责任链设计模式。 在运行时处理器顺序的可变性也很重要。模式的UML表示如下#xff1a; 处理程序定义处理器对象的一般结构。 这里的“ HandleRequest”是抽象处理器方法。 … java 职责链模式 当应有几个处理器来执行某项操作并为这些处理器定义特定顺序时就需要采用责任链设计模式。 在运行时处理器顺序的可变性也很重要。模式的UML表示如下 处理程序定义处理器对象的一般结构。 这里的“ HandleRequest”是抽象处理器方法。 处理程序还具有自己的类型引用该引用表示下一个处理程序。 为此应定义一个公共的“ setNextHandler”方法并且该处理程序恰好是一个抽象类。 ConcreteHandler定义处理器的不同表示形式。 最后客户端负责创建所需的处理程序处理器并定义它们之间的链顺序。 通常此模式可能存在两种不同的实现方式。 差异与“链路由业务逻辑的位置”有关。 链路由业务逻辑可以在Handler抽象类或ConcreteHandler类中或在两者中。 下面将给出前两种方法的样本 1.“处理程序”具有链路由业务逻辑 public abstract class Processor {protected Processor next;protected int threshold;public void setNextProcessor(Processor p) {next p;}public void process(String data, int value) {if (value threshold) {process(data);}if (next ! null) {next.message(data, threshold);}}abstract protected void processData(String data);
}
public class ProcessorA extends Processor {public ProcessorA (int threshold) {this.threshold threshold;}protected void processData(String data) {System.out.println(Processing with A: data);}
}
public class ProcessorB extends Processor {public ProcessorB (int threshold) {this.threshold threshold;}protected void writeMessage(String data) {System.err.println(Processing with B: data);}
}
public class Client {public static void main(String[] args) {Processor p, p1, p2;p1 p new ProcessorA(2);p2 new ProcessorB(1);p1.setNextProcessor(p2);// Handled by ProcessorAp.process(data1, 2);// Handled by ProcessorA and ProcessorBp.process(data2, 1);}
} 2.ConcreteHandler具有链路由业务逻辑 public abstract class Processor {protected Processor next;protected int threshold;public void setNextProcessor(Processor p) {next p;}abstract protected void processData(String data);
}
public class ProcessorA extends Processor {public ProcessorA (int threshold) {this.threshold threshold;}protected void processData(String data, int value) {System.out.println(Processing with A: data);if (value threshold next ! null) {next.processData(data, value);}}
}
public class ProcessorB extends Processor {public ProcessorB (int threshold) {this.threshold threshold;}protected void processData(String data, int value) {System.out.println(Processing with B: data);if (value threshold next ! null) {next.processData(data, value);}}
}
public class Client {public static void main(String[] args) {Processor p, p1, p2;p1 p new ProcessorA(2);p2 new ProcessorB(1);p1.setNextProcessor(p2);// Handled by ProcessorAp.processData(data1, 1);// Handled by ProcessorA and ProcessorBp.processData(data2, 2);}
} 参考来自Java的JCG合作伙伴 Cagdas Basaraner在CodeBuild博客上使用Java实现的“责任链”模式的2种实现 。 翻译自: https://www.javacodegeeks.com/2012/06/chain-of-responsibility-pattern-in-java.htmljava 职责链模式