您的位置:首页 > 编程语言 > Java开发

Java责任链设计模式-Lambda表达式

2017-10-12 09:09 411 查看
责任链模式是创建处理对象链 (如操作链) 的常见解决方案。一个处理对象可以做一些工作并将结果传递给另一个对象, 然后它也会执行一些工作并将其传递给另一个处理对象, 等等。

通常, 通过定义一个表示处理对象的抽象类来实现这个模式, 定义一个字段来跟踪后继者。一旦它完成了它的工作, 处理对象移交它的工作对它的后继者。

示例代码:

ChainOfResponsibilityMain.java

import java.util.function.Function;
import java.util.function.UnaryOperator;

public class ChainOfResponsibilityMain {

public static void main(String[] args) {
ProcessingObject<String> p1 = new HeaderTextProcessing();
ProcessingObject<String> p2 = new SpellCheckerProcessing();
p1.setSuccessor(p2);
String result1 = p1.handle("Aren't labdas really sexy?!!");
System.out.println(result1);

UnaryOperator<String> headerProcessing =
(String text) -> "From Raoul, Mario and Alan: " + text;
UnaryOperator<String> spellCheckerProcessing =
(String text) -> text.replaceAll("labda", "lambda");
Function<String, String> pipeline = headerProcessing.andThen(spellCheckerProcessing);
String result2 = pipeline.apply("Aren't labdas really sexy?!!");
System.out.println(result2);
}

static private abstract class ProcessingObject<T> {
protected ProcessingObject<T> successor;

public void setSuccessor(ProcessingObject<T> successor) {
this.successor = successor;
}

public T handle(T input) {
T r = handleWork(input);
if (successor != null) {
return successor.handle(r);
}
return r;
}

abstract protected T handleWork(T input);
}

static private class HeaderTextProcessing
extends ProcessingObject<String> {
public String handleWork(String text) {
return "From Raoul, Mario and Alan: " + text;
}
}

static private class SpellCheckerProcessing
extends ProcessingObject<String> {
public String handleWork(String text) {
return text.replaceAll("labda", "lambda");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息