From 10a9c4c4351f908ec2fc3b89c8284ad3e013110e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Tue, 25 Sep 2018 19:14:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=93=BE=E5=BC=8F=E8=B0=83=E7=94=A8=E5=BB=BA?= =?UTF-8?q?=E9=80=A0=E8=80=85=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../creational/builder/chain/BuCourse.java | 78 +++++++++++++++++++ .../creational/builder/CourseBuilderTest.java | 12 +++ 2 files changed, 90 insertions(+) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/creational/builder/chain/BuCourse.java 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