静态代码分析程序中设计模式的应用

大家好我是王有志,一个分享硬核 Java 技术的金融摸鱼侠。本文首发于微信公众号王有志

大家好,我是王有志。前面我通过两篇文章向大家分享了我们最近在做的静态代码分析程序(CA)的定位,能力,使用和设计:

今天呢, 我向各位汇报下在 CA 的设计过程中使用到了哪些设计模式,以及我们是如何运用这些设计模式的。我们在 CA 中主要应用了 3 中设计模式:责任链模式,建造者模式和工厂模式,下面我们聊一下责任链模式和工厂模式的应用。

Tips:CA 项目的地址:https://gitee.com/wyz-A2/CodeAnalysi

责任链模式的应用

静态代码分析程序的流程设计》中提到,基于对 CA 项目的需求分析我们在设计主流程时选择了责任链模式,在责任链模式的应用上,我们并没有遵循原教旨主义,让处理节点既承担业务逻辑的功能,又承担链的功能。

我们先来看一下原教旨主义中责任链模式的实现。

定义一个处理节点接口,代码如下:

public interface BaseHandler {
   
  /**
    * 负责业务逻辑处理
    */
  void handle();

  /**
    * 设置下一个处理器
    * @param handler 处理器
    */
  void setNextHandler(BaseHandler handler);
}

再来实现两个处理节点,首先是项目下载处理节点,代码如下:

public class VcsDownloadHandler implements BaseHandler {
   

  private BaseHandler nextHandler;

  @Override
  public void handle() {
   
    // 这里实现业务逻辑处理

    // 这里负责调用下一个处理节点
    if (this.nextHandler != null) {
   
      this.nextHandler.handle();
    }
  }

  @Override
  public void setNextHandler(BaseHandler handler) {
   
    this.nextHandler = handler;
  }
}

接着是差异对比处理节点,代码如下:

public class VcsDifferentHandler implements BaseHandler {
   

  private BaseHandler nextHandler;

  @Override
  public void handle() {
   
    // 这里实现业务逻辑处理

    // 这里负责调用下一个处理节点
    if (this.nextHandler != null) {
   
      this.nextHandler.handle();
    }
  }

  @Override
  public void setNextHandler(BaseHandler handler) {
   
    this.nextHandler = handler;
  }
}

最后我们来使用这个责任链,代码如下:

public static void main(String[] args) {
   
  // 构建处理节点
  BaseHandler vcsDownloadHandler = new VcsDownloadHandler();
  BaseHandler vcsDifferentHandler = new VcsDifferentHandler();

  // 设置处理节点关联关系
  vcsDownloadHandler.setNextHandler(vcsDifferent
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术范王有志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值