美文网首页
责任链模式

责任链模式

作者: 杨殿生 | 来源:发表于2018-09-23 16:53 被阅读0次

责任链解决的问题
一种创建处理对象序列(比如操作序列)的通用方案。一个处理对象可能需要在完成一些工作之后,将结果传递给另一个对象,这个对象接着做一些工作,在转交给下一个处理对象。依此类推

责任链模式.png

首先创建ProcessingObject类

public 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);
}

创建两个实现类

public class HeaderTextProcessing extends ProcessingObject<String>{

    @Override
    protected String handleWork(String input) {
        return "HeaderTextProcessing:" + input;
    }
}
public class SpellCheckerProcessing extends ProcessingObject<String>{
    @Override
    protected String handleWork(String input) {
        return "SpellCheckerProcessing:" + input;
    }
}

调用责任链

    public static void main(String[] args){
        ProcessingObject<String> p1 = new HeaderTextProcessing();
        ProcessingObject<String> p2 = new SpellCheckerProcessing();
        p1.setSuccessor(p2);
        String result = p1.handle("contet");
        System.out.println(result);
    }

最后输出


image.png

如果需要修改责任链逻辑可以修改ProcessingObject中的handle()方法,可以在在处理handle之前或者之后添加筛选器,用以增强handle功能

Java8 中的实现

        UnaryOperator<String> headprocessing = text -> "HeaderTextProcessing:" + text;
        UnaryOperator<String> spellCheckerrocessing = text -> "SpellCheckerProcessing:" + text;
        Function<String,String> pipeline = headprocessing.andThen(spellCheckerrocessing);
        String result = pipeline.apply("content");
        System.out.println(result);

这个模式就是在连接函数,使用andThen就可以起到连接作用

相关文章

网友评论

      本文标题:责任链模式

      本文链接:https://www.haomeiwen.com/subject/vxcqoftx.html