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
诸葛