1    代码演练

1.1  代码演练1

 

 

 

 

1    代码演练

1.1  代码演练1

需求:

木木网发布课程,需要审批员审批,看课程视频是否上传,课程手记是否上传,课程名字是否上传(这是我加的),请完成这个审批过程。

 

 

重点:(个人开发中没有注意到的地方)

1  抽象类Approver的setApprover方法是重点,实现了Approver子类之间的传递关系。

2  各种审批子类之间的非空判断

 

uml类图:

 

 

 

测试类:

package com.geely.design.pattern.behavioral.chainofresposibility;

public class Test {

    public static void main(String [] args){
        Course course = new Course();
        course.setCourseName("葵花宝典"); 
        course.setCourseArticle("葵花宝典手记");
        course.setCourseVideo("葵花宝典视频");

        Approver approver1 = new ArticleApprover();
        Approver approver2 = new VideoApprover();
        Approver approver3 = new NameApprover();

        approver1.setNextApprover(approver2);
        approver2.setNextApprover(approver3);

        approver1.deployCourse(course);
    }

}

 

 

审批抽象类:

package com.geely.design.pattern.behavioral.chainofresposibility;

public abstract  class Approver {

    /**
     * 注意:这里是核心点:
     * 供应链自己调用自己
     */
    protected Approver approver;

    public Approver setNextApprover(Approver approver){
        return this.approver = approver;
    }

    /**
     * 这个实现让子类去做,所以在这里用抽象方法
     * @param course
     */
    public abstract void deployCourse(Course course);

}

 

 

手记审批类:

 

package com.geely.design.pattern.behavioral.chainofresposibility;

import org.apache.commons.lang.StringUtils;

public class ArticleApprover extends Approver {

    @Override
    public void deployCourse(Course course) {
        if(StringUtils.isNotEmpty(course.getCourseArticle())){
            System.out.println(course.getCourseName()+"手记不为空,审批通过!");
            //必须进行非空校验,否则会出现空指针异常
            if(approver != null){
                approver.deployCourse(course);
            }
        }else{
            System.out.println(course.getCourseName()+"手记为空,审批不能通过!");
        }

    }
}

 

 

 

视频审批类:

 

package com.geely.design.pattern.behavioral.chainofresposibility;

import org.apache.commons.lang.StringUtils;

public class VideoApprover extends Approver {
    @Override
    public void deployCourse(Course course) {
        if(StringUtils.isNotEmpty(course.getCourseVideo())){
            System.out.println(course.getCourseName()+"视频不为空,审批通过!");
            //必须进行非空校验,否则会出现空指针异常
            if(approver != null){
                approver.deployCourse(course);
            }
        }else{
            System.out.println(course.getCourseName()+"视频为空,审批不能通过!");
        }

    }
}

 

 

 

课程名字审批类:

 

package com.geely.design.pattern.behavioral.chainofresposibility;

import org.apache.commons.lang.StringUtils;

public class NameApprover extends Approver {
    @Override
    public void deployCourse(Course course) {
        if(StringUtils.isNotEmpty(course.getCourseName())){
            System.out.println(course.getCourseName()+"名字不为空,审批通过!");
            //必须进行非空校验,否则会出现空指针异常
            if(approver != null){
                approver.deployCourse(course);
            }
        }else{
            System.out.println(course.getCourseName()+"名字为空,审批不能通过!");
        }

    }
}

 

 

课程基类:

package com.geely.design.pattern.behavioral.chainofresposibility;

public class Course {
    private String courseName;
    private String courseArticle;
    private String courseVideo;

    @Override
    public String toString() {
        return "Course{" +
                "courseName='" + courseName + '\'' +
                ", courseArticle='" + courseArticle + '\'' +
                ", courseVideo='" + courseVideo + '\'' +
                '}';
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public String getCourseArticle() {
        return courseArticle;
    }

    public void setCourseArticle(String courseArticle) {
        this.courseArticle = courseArticle;
    }

    public String getCourseVideo() {
        return courseVideo;
    }

    public void setCourseVideo(String courseVideo) {
        this.courseVideo = courseVideo;
    }
}

 

 

 

打印日志:

葵花宝典手记不为空,审批通过!
葵花宝典视频不为空,审批通过!
葵花宝典名字不为空,审批通过!

Process finished with exit code 0

 

posted on 2020-03-05 05:35  菜鸟乙  阅读(130)  评论(0编辑  收藏  举报