简单建造者模式

This commit is contained in:
2018-09-25 18:59:07 +08:00
parent 25fcce6248
commit 4b34ba603c
5 changed files with 159 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
package top.fjy8018.designpattern.pattern.creational.builder;
/**
* 建造者抽象类
*
* @author F嘉阳
* @date 2018-09-25 17:15
*/
public abstract class AbstractCourseBuilder {
public abstract void courseName(String courseName);
public abstract void coursePPT(String coursePPT);
public abstract void courseVideo(String courseVideo);
/**
* question & answer
*/
public abstract void courseQA(String courseQA);
public abstract BCourse build();
}

View File

@@ -0,0 +1,59 @@
package top.fjy8018.designpattern.pattern.creational.builder;
/**
* 实体类
*
* @author F嘉阳
* @date 2018-09-25 17:13
*/
public class BCourse {
private String courseName;
private String coursePPT;
private String courseVideo;
/**
* question & answer
*/
private String courseQA;
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getCoursePPT() {
return coursePPT;
}
public void setCoursePPT(String coursePPT) {
this.coursePPT = coursePPT;
}
public String getCourseVideo() {
return courseVideo;
}
public void setCourseVideo(String courseVideo) {
this.courseVideo = courseVideo;
}
public String getCourseQA() {
return courseQA;
}
public void setCourseQA(String courseQA) {
this.courseQA = courseQA;
}
@Override
public String toString() {
return "BCourse{" +
"courseName='" + courseName + '\'' +
", coursePPT='" + coursePPT + '\'' +
", courseVideo='" + courseVideo + '\'' +
", courseQA='" + courseQA + '\'' +
'}';
}
}

View File

@@ -0,0 +1,24 @@
package top.fjy8018.designpattern.pattern.creational.builder;
/**
* 教练->建造课程
*
* @author F嘉阳
* @date 2018-09-25 18:54
*/
public class Coach {
private AbstractCourseBuilder builder;
public Coach(AbstractCourseBuilder builder) {
this.builder = builder;
}
public BCourse createCourse(String courseName, String coursePPT, String courseVideo, String courseQA) {
builder.courseName(courseName);
builder.coursePPT(coursePPT);
builder.courseVideo(courseVideo);
builder.courseQA(courseQA);
return builder.build();
}
}

View File

@@ -0,0 +1,37 @@
package top.fjy8018.designpattern.pattern.creational.builder;
/**
* 建造者实现类
*
* @author F嘉阳
* @date 2018-09-25 17:17
*/
public class CourseBuilder extends AbstractCourseBuilder {
private BCourse course = new BCourse();
@Override
public void courseName(String courseName) {
course.setCourseName(courseName);
}
@Override
public void coursePPT(String coursePPT) {
course.setCoursePPT(coursePPT);
}
@Override
public void courseVideo(String courseVideo) {
course.setCourseVideo(courseVideo);
}
@Override
public void courseQA(String courseQA) {
course.setCourseQA(courseQA);
}
@Override
public BCourse build() {
return course;
}
}

View File

@@ -0,0 +1,17 @@
package top.fjy8018.designpattern.pattern.creational.builder;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@Slf4j
class CourseBuilderTest {
@Test
void coachBuild() {
Coach coach = new Coach(new CourseBuilder());
BCourse course = coach.createCourse("Java课程", "课程PPT", "课程视频", "课程问答");
log.info(course.toString());
}
}