정의
- 모델 빌더는 동일한 프로세스의 구성이 서로 다른 표현을 만들 수 있습니다 그래서, 그의 표현을 분리하여 복잡한 객체를 구축 할 것입니다.
- 단지 건설의 유형을 지정해야 사용자 생성 및 세부 사항이 알아야 할 과정을을 만드는 데 필요한.
- 입력 : 만들기 유형
적용 현장
- 목적은 매우 복잡한 내부 구조가있는 경우 (여러 속성)
- 고립 된 복잡한 객체의 생성과 사용
이점
- 좋은 패키지를 만들고 별도의 사용
- 어느 정도 수준의 독립의 건설 사이 좋은 디커플링을 개발,
결점
- 빌더 원치 않는 객체를 생성
- 내부 제품 변경이 빌더는 수정해야
빌더 패턴 및 공장 패턴의 차이
- 모델 메소드 호출 순서에 더 초점을 빌더, 공장 모델은 더 많은 제품을 만들기에 초점을 맞추고
- 다른 공장 패턴의 객체를 생성하기위한 노력은 다양한 구성 요소에서 복잡한 제품을 만드는 공장 패턴에서 같은 제품을 만들 수 있습니다.
- 공장 모드는 제품의 구성 요소가 무엇인지 알고, 창조자 모드 요구를 작성해야합니다.
- 당신이 객체가 많은 단계를 필요로 만들 빌더 패턴에 적용, 단순히 공장 패턴이 될 수 있습니다 만들 수 있습니다.
Conding
건물 객체를 제공 플러그인 롬복 방법 @Builder 주석 빌더 패턴의 전형이다.
package com.example.design.creational.course.v2;
import lombok.Data;
import lombok.ToString;
/**
* 建造者模式 静态内部类
*
* @author wang
*/
@Data
@ToString
public class Course {
private String courseName;
private String coursePpt;
private String courseVideo;
private String courseArticle;
private String courseQa;
public Course(CourseBuilder courseBuilder) {
this.courseName = courseBuilder.courseName;
this.courseArticle = courseBuilder.courseArticle;
this.coursePpt = courseBuilder.coursePpt;
this.courseQa = courseBuilder.courseQa;
this.courseVideo = courseBuilder.courseVideo;
}
public static class CourseBuilder {
private String courseName;
private String coursePpt;
private String courseVideo;
private String courseArticle;
private String courseQa;
public CourseBuilder buildCourseName(String courseName) {
this.courseName = courseName;
return this;
}
public CourseBuilder buildCoursePpt(String coursePpt) {
this.coursePpt = coursePpt;
return this;
}
public CourseBuilder buildCourseVideo(String courseVideo) {
this.courseVideo = courseVideo;
return this;
}
public CourseBuilder buildCourseArticle(String courseArticle) {
this.courseArticle = courseArticle;
return this;
}
public CourseBuilder buildCourseQa(String courseQa) {
this.courseQa = courseQa;
return this;
}
public Course build() {
return new Course(this);
}
}
}
그것은 사용하여 객체를 생성하는 빌더 방법으로 사용할 수 있습니다
package com.example.design.creational.course.v2;
/**
* @author wang
*/
public class Test {
public static void main(String[] args) {
Course course = new Course.CourseBuilder().
buildCourseArticle("article").
buildCourseName("name").
buildCoursePpt("ppt").
buildCourseQa("qa").
buildCourseVideo("video")
.build();
System.out.println(course);
}
}