定義
- モデルビルダーは、同じプロセスの構築は異なる表現を作成できるように、彼の表現の分離を伴う複雑なオブジェクトを構築する予定です。
- 構成のみのタイプを指定する必要があり、ユーザーはそれら、作成プロセスを作成するために必要と詳細が知っている必要があります。
- タイプ:作成するタイプ
該当シーン
- オブジェクトが非常に複雑な内部構造を持っている場合(複数の属性)
- 孤立複雑なオブジェクトの作成と使用
利点
- 作成し、別の使用するための良いパッケージ
- ある程度、クラスの独立性の構築の間に良好なデカップリングを開発し、
短所
- 不要なオブジェクトを生成ビルダー
- ビルダーを変更する必要が内蔵製品の変更、
Builderパターンとファクトリパターンの違い
- メソッド呼び出しシーケンスに集中するビルダーモデル、工場出荷時のモデルは、より多くの製品を作るに焦点を当てました
- 工場出荷時のパターンのうち、同一の商品を作成、構成要素の様々な複雑な製品を作成するために、異なる工場パターンのオブジェクトを作成するための努力。
- ファクトリモードのみがそれを作成する必要があり、作成者モードでは、製品の構成要素であるかを知る必要があります。
- あなたがオブジェクトを作成するときにBuilderパターンに適用することは、多くの手順を実行する必要があり、単にパターンが可能ファクトリを作成します。
Conding
建物オブジェクトを提供するプラグインロンボクウェイ@Builderアノテーションは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);
}
}