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

来源:互联网 发布:jy js jc jk jd 编辑:程序博客网 时间:2024/06/05 03:15

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

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

示例代码:
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");        }    }}
原创粉丝点击