基础定义
- 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,使用多个简单的对象一步一步构建成一个复杂的对象
- 用户只需指定需要建造的类型就可以得到它们,建造过程及细节不需要知道
- 创建型
使用场景:
- 如果一个对象有非常复杂的内部结构(属性)
- 想把复杂对象的创建和使用分离
优点:
- 封装性好,创建和使用分离
- 结偶
缺点:
- 产生很多的Builder方法,内部结构若过于复杂,将会导致整个系统变得非常庞大,不利于控制。
- 产品内部发生变化,建造者模型也要变化
建造者模式更注重方法的调用,工厂模式注重创建产品。建造者可以创建复杂的模型,工厂模式创建的产品比较单一。
源码实例
- StringBuilder、StringBuffer
代码实例
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.courseVideo = courseBuilder.courseVideo;
this.courseQA = courseBuilder.courseQA;
}
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);
}
}
}
// 使用
public class Test {
public static void main(String[] args){
Course course = new Course.CourseBuilder()
.buildCourseName("Python")
.buildCoursePPT("Python PPT")
.buildCourseArticle("Python Article")
.buildCourseQA("Python QA")
.buildCourseVideo("Python Video").build();
System.out.println(course);
}
}