责任链模式

目录

非Lambda模式

抽象处理器

处理器实例

Lambda模式 ->Function.andThen()


非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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值