首页 > 其他分享 >Pipeline 责任链

Pipeline 责任链

时间:2022-09-27 14:45:27浏览次数:47  
标签:Pipeline arg0 void 责任 handler context HandlerChainContext public

public class Main {
    public static void main(String[] args) {
        Pipeline p = new Pipeline();
        p.addLast(new Handler1());
        p.addLast(new Handler2());
        p.requestProcess("开始了....");
    }
}

打印:
这是头部
Handler1
Handler2
public class Pipeline {

    public HandlerChainContext context = new HandlerChainContext(new AbstractHandler() {
        @Override
        void doHandler(HandlerChainContext context, Object arg0) {
            System.out.println("这是头部");
            context.runNext(arg0);
        }
    });


    // 添加责任链
    public void addLast(AbstractHandler handler) {
        HandlerChainContext current = context;
        while (current.next != null) {
            current = current.next;             
        }   //最核心也就这句 找到最后 添加下一个
        current.next = new HandlerChainContext(handler);
    }

    // 开始调用
    public void requestProcess(Object arg0) {
        context.handler(arg0);
    }
}

public abstract class AbstractHandler {
    abstract void doHandler(HandlerChainContext context, Object arg0);
}

public class Handler1 extends AbstractHandler {

    @Override
    void doHandler(HandlerChainContext context, Object arg0) {
        System.out.println("Handler1");
        context.runNext(arg0);
    }
}
public class Handler2 extends AbstractHandler {

    @Override
    void doHandler(HandlerChainContext context, Object arg0) {
        System.out.println("Handler2");
        context.runNext(arg0);
    }
}
public class HandlerChainContext {
    HandlerChainContext next;// 持有下一个节点

    AbstractHandler handler;

    public HandlerChainContext(AbstractHandler handler) {
        this.handler = handler;
    }

    void handler(Object arg0) {
        this.handler.doHandler(this, arg0);
    }

    void runNext(Object arg0) {
        if (this.next != null) {
            this.next.handler(arg0);
        }
    }
}

标签:Pipeline,arg0,void,责任,handler,context,HandlerChainContext,public
From: https://www.cnblogs.com/z-sir/p/16734494.html

相关文章

  • 【设计模式】之责任链模式
    定义责任链模式(ChainofResponsibilityPattern)中,有一条由请求处理者对象组成的链条,每个对象(除最后一个对象外)都持有下一个对象的引用,请求发送者将请求发送给第一个对象,......
  • 使用Blue Ocean设计pipeline脚本
    BlueOcean是pipeline的可视化ui,可以通过图形ui设计pipeline先在gitlab创建一个项目,必须是空项目(连README文件也不能有),项目名称这里命名为pipeline 安装插件BlueOcea......
  • 如何在 Apple Silicon 上安装 Kubeflow Pipelines v2
    如何在AppleSilicon上安装KubeflowPipelinesv2KubeflowPipelines(KFP)是一个强大的平台,用于使用Kubernetes大规模构建机器学习管道.该平台在GCP等主要云平台......
  • scrapy框架之item与pipelines
    继续以起点小说为例子,我们要做的就是把对象存储到item(类似于一个字典)中,在通过pipelines持久化到txt文件中。之前我们在运行爬虫的后面加“-o爬虫名称”这样很方便,但是也......
  • jenkins pipeline notes
    获取触发用户:defBUILDER_USER="${currentBuild.getBuildCauses()[0].userId}"由上游项目触发时获取上游项目构建信息和触发用户:post{always{script......
  • 持续集成环境问题汇总(基于:java + testng + httpclient + allure + git + gitlab + jen
    说明包含前期调试遇到的问题 idea中,命令执行testng.xml,报错PleaserefertoD:\myjava\apiAutoTest\target\surefire-reportsfortheindividualtestresults.参考......
  • Jenkins Pipeline项目实战
    一、项目流程 Jenkins从git拉取指定tag代码Jenkins构建代码、镜像以及推送镜像到镜像库Jenkins通过PublishOverSSH通知远程服务器拉取镜像、远程服务器通过镜像启......
  • 实践中负责任漏洞披露的观察
    实践中负责任漏洞披露的观察ThefacadeoftheFinnishparliamentreflectedonthewindowoftheFinnishParliamentAnnex.Image©LariHuttunen.○在过去的几......
  • jenkins pipeline开发工具
    Pipeline开发工具1.片段生成器(有些需要安装对应的插件)  2.声明式语法生成器  3.全局变量参考 举例:BUILD_NUMBER构建号BUILD_ID构建号BUILD_DISPLAY_N......
  • ElasticSearch聚合之管道聚合(Pipeline Aggregation)
    管道聚合让上一步聚合的结果作为下一个聚合的输入,类似stream()流的操作,当不上终结操作时,每次操作的流都作为下次操作的输入管道类型有很多种不同类型,每种类型都与其他聚......