目录
非Lambda模式
抽象处理器
1.抽象处理方法handleWork(每个处理器各自的处理逻辑)
2.设置处理器的下一个继任者successor
3.所有处理器的通用逻辑handle,调用自身处理逻辑处理后将结果移交继任者
package pipeline;
public abstract class ProcessingObject<T> {
ProcessingObject<T> successor;
public void setSuccessor(ProcessingObject<T> successor) {
this.successor = successor;
}
public T handle(T input) {
T result;
T r = handleWork(input);
if (successor != null) {
result = successor.handle(r);
} else {
result = r;
}
return result;
}
protected abstract T handleWork(T input);
}
处理器实例
package pipeline;
public class HeaderProcessor extends ProcessingObject<String> {
@Override
protected String handleWork(String input) {
return "Header=======" + input;
}
}
package pipeline;
public class SpellCheckProcessor extends ProcessingObject<String> {
@Override
protected String handleWork(String input) {
return input.replace("labda", "lambda");
}
}
Lambda模式 ->Function.andThen()
package pipeline;
import java.util.function.Function;
import java.util.function.UnaryOperator;
public class Test {
public static void main(String[] args) {
String str = "labda, lasdfds, lambda";
// 非lambda模式责任链
ProcessingObject<String> headerProcessor1 = new HeaderProcessor();
ProcessingObject<String> spellCheckProcessor1 = new SpellCheckProcessor();
headerProcessor1.setSuccessor(spellCheckProcessor1);
String result = headerProcessor1.handle(str);
System.out.println("non-lambda:" + result);// Header=======lambda, lasdfds, lambda
// lambda模式责任链
UnaryOperator<String> headerProcessor2 = (String input) -> "Header=======" + input;
UnaryOperator<String> spellCheckProcessor2 = (String input) -> input.replace("labda", "lambda");
Function<String, String> pipeline = headerProcessor2.andThen(spellCheckProcessor2);
String lambdaResult = pipeline.apply(str);
System.out.println("lambda:" + lambdaResult);
}
}
non-lambda:Header=======lambda, lasdfds, lambda
lambda:Header=======lambda, lasdfds, lambda