diff --git a/src/main/java/top/fjy8018/designpattern/pattern/creational/builder/chain/BuCourse.java b/src/main/java/top/fjy8018/designpattern/pattern/creational/builder/chain/BuCourse.java new file mode 100644 index 0000000..6f59ad2 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/creational/builder/chain/BuCourse.java @@ -0,0 +1,78 @@ +package top.fjy8018.designpattern.pattern.creational.builder.chain; + +/** + * 实体类 + * 用静态内部类建造者,实现链式调用(推荐) + * + * @author F嘉阳 + * @date 2018-09-25 17:13 + */ +public class BuCourse { + private String courseName; + private String coursePPT; + private String courseVideo; + /** + * question & answer + */ + private String courseQA; + + /** + * 构造器接受静态内部类 + * + * @param builder + */ + public BuCourse(BuCourseBuilder builder) { + this.courseName = builder.courseName; + this.coursePPT = builder.coursePPT; + this.courseVideo = builder.courseVideo; + this.courseQA = builder.courseQA; + + } + + @Override + public String toString() { + return "BCourse{" + + "courseName='" + courseName + '\'' + + ", coursePPT='" + coursePPT + '\'' + + ", courseVideo='" + courseVideo + '\'' + + ", courseQA='" + courseQA + '\'' + + '}'; + } + + public static class BuCourseBuilder { + private String courseName; + private String coursePPT; + private String courseVideo; + private String courseQA; + + public BuCourseBuilder courseName(String courseName) { + this.courseName = courseName; + return this; + } + + public BuCourseBuilder coursePPT(String coursePPT) { + this.coursePPT = coursePPT; + return this; + } + + public BuCourseBuilder courseVideo(String courseVideo) { + this.courseVideo = courseVideo; + return this; + } + + public BuCourseBuilder courseQA(String courseQA) { + this.courseQA = courseQA; + return this; + } + + /** + * 传递静态内部类返回目标对象 + * + * @return + */ + public BuCourse build() { + return new BuCourse(this); + } + + } +} diff --git a/src/test/java/top/fjy8018/designpattern/pattern/creational/builder/CourseBuilderTest.java b/src/test/java/top/fjy8018/designpattern/pattern/creational/builder/CourseBuilderTest.java index 6c9de39..ee522ca 100644 --- a/src/test/java/top/fjy8018/designpattern/pattern/creational/builder/CourseBuilderTest.java +++ b/src/test/java/top/fjy8018/designpattern/pattern/creational/builder/CourseBuilderTest.java @@ -2,6 +2,7 @@ package top.fjy8018.designpattern.pattern.creational.builder; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; +import top.fjy8018.designpattern.pattern.creational.builder.chain.BuCourse; import static org.junit.jupiter.api.Assertions.*; @@ -14,4 +15,15 @@ class CourseBuilderTest { BCourse course = coach.createCourse("Java课程", "课程PPT", "课程视频", "课程问答"); log.info(course.toString()); } + + @Test + void chainBuild() { + BuCourse course = new BuCourse.BuCourseBuilder() + .courseName("Java课程") + .coursePPT("课程PPT") + .courseVideo("课程视频") + .courseQA("课程问答") + .build(); + log.info(course.toString()); + } } \ No newline at end of file