定义:将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示。
特征:用户只需指定需要创建的类型就可以得到它们,创建过程及细节不需要知道。
类型:创建型。
适用场景:
- 如果一个对象有非常复杂的内部结构(很多属性)
- 想把复杂对象的创建和使用分离
优点:
- 封装性好,创建和使用分离
- 扩展性好,建造类之间独立,一定程度上解藕
缺点:
- 产生多余的builder对象
- 产品内部发生变化,建造者都要修改,成本较大
package main.java.creational.builder;
public class Course {
/** 课程名称*/
private String name;
/** 课程ppt*/
private String ppt;
/** 课程视频*/
private String video;
/** 课程价格*/
private String price;
/** 课程手记*/
private String notes;
public Course(CourseBuilder courseBuilder) {
this.name = courseBuilder.name;
this.ppt = courseBuilder.ppt;
this.video = courseBuilder.video;
this.price = courseBuilder.price;
this.notes = courseBuilder.notes;
}
@Override
public String toString() {
return "Course{" +
"name='" + name + '\'' +
", ppt='" + ppt + '\'' +
", video='" + video + '\'' +
", price='" + price + '\'' +
", article='" + notes + '\'' +
'}';
}
public static class CourseBuilder extends Test {
private String name;
private String ppt;
private String video;
private String price;
private String notes;
public CourseBuilder builderName(String name) {
this.name = name;
return this;
}
public CourseBuilder builderPpt(String ppt) {
this.ppt = ppt;
return this;
}
public CourseBuilder builderVideo(String video) {
this.video = video;
return this;
}
public CourseBuilder builderPrice(String price) {
this.price = price;
return this;
}
public CourseBuilder builderNotes(String notes) {
this.notes = notes;
return this;
}
public Course build() {
return new Course(this);
}
}
}
package main.java.creational.builder;
import main.java.creational.builder.Course.CourseBuilder;
public class Test {
public static void main(String[] args) {
Course course = new CourseBuilder()
.builderName("java从入门到放弃").builderPrice("零元购").build();
System.out.println(course);
}
}