美文网首页
设计模式(二二)-- 责任链模式

设计模式(二二)-- 责任链模式

作者: 信仰年輕 | 来源:发表于2018-12-05 16:23 被阅读0次

源代码
GitHub源代码

1.本文目标

本文目标是为了让大家认识并理解责任链模式

2.基本套路

定义:为请求创建一个接受此次请求对象的链
类型:行为型
选择关键点:对于每一次请求是否每个处理的对象都需要一次处理机会
设计原则:遵循迪米特
使用概率:15%
难度系数:中

3.适用场景

1.一个请求的处理需要多个对象当中的一个或几个协作处理

4.使用步骤

用栗子能更好的说明问题,请继续往下看

5.举个栗子

我们用具体的代码去更好的理解这个设计模式

5.1栗子说明

  • 背景:在网站上发布一个课程,需要两个人检查,一个是视频,一个是手记
  • 目的:用责任链模式模

5.2使用步骤

实现代码如下:

步骤1.创建课程类

public class Course {
    private String name;
    private String article;
    private String video;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getArticle() {
        return article;
    }

    public void setArticle(String article) {
        this.article = article;
    }

    public String getVideo() {
        return video;
    }

    public void setVideo(String video) {
        this.video = video;
    }

    @Override
    public String toString() {
        return "Course{" +
                "name='" + name + '\'' +
                ", article='" + article + '\'' +
                ", video='" + video + '\'' +
                '}';
    }
}

步骤2.创建抽象的批准者类

public abstract class Approver {
    protected Approver approver;

    public void setNextApprover(Approver approver){
        this.approver = approver;
    }
    public abstract void deploy(Course course);
}

步骤3. 创建手记批准者和视频批准者

public class ArticleApprover extends Approver {
    @Override
    public void deploy(Course course) {
        if (StringUtils.isNotEmpty(course.getArticle())) {
            System.out.println(course.getName() + "含有手记,批准");
            if (approver != null) {
                approver.deploy(course);
            }
        } else {
            System.out.println(course.getName() + "不含有手记,不批准,流程结束");
            return;
        }
    }
}

public class VideoApprover extends Approver {
    @Override
    public void deploy(Course course) {

        if (StringUtils.isNotEmpty(course.getVideo())) {
            System.out.println(course.getName() + "含有视频,批准");
            if (approver != null) {
                approver.deploy(course);
            }
        } else {
            System.out.println(course.getName() + "不含有视频,不批准,流程结束");
            return;
        }
    }
}

步骤4. 测试

 public static void main(String[] args) {
        //创建手记批准者
        Approver articleApprover = new ArticleApprover();
        //创建视频批准者
        Approver videoApprover = new VideoApprover();

        //创建课程
        Course course = new Course();
        course.setName("Java设计模式精讲");
        course.setArticle("Java设计模式精讲的手记");
        course.setVideo("Java设计模式精讲的视频");

        //校验
        articleApprover.setNextApprover(videoApprover);
        articleApprover.deploy(course);
 }

6.优点

  • 请求的发送者和接受者(请求的处理者)解耦
  • 责任链可以动态组合

7.缺点

  • 责任链太长或者处理时间过长,影响性能
  • 责任链有可能过多

8.总结

本文只是对责任链模式进行一个分享,接下来会从创建型模式,结构型模式,行为型模式,这三大类展开一个系列分享,大家可以持续进行关注,信仰年輕的设计模式,蟹蟹啦。

相关文章

网友评论

      本文标题:设计模式(二二)-- 责任链模式

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