建造者模式是一个创建型模式,是将一个复杂的构建过程拆分,使得同样的构建过程创建不同的表示。建造者模式适用于创建对象需要很多步骤,一些基本部件不会变,而其组合经常变化的时候。
建造者的链式写法
编写Course类:
@Data
public class Course {
private String name;
private String ppt;
private String video;
private String note;
}
编写建造Course类:
public class CourseBuilder {
private Course course = null;
public CourseBuilder addName(String name){
course.setName(name);
return this;
}
public CourseBuilder addPpt(String ppt){
course.setPpt(ppt);
return this;
}
public CourseBuilder addVideo(String video){
course.setVideo(video);
return this;
}
public CourseBuilder addNote(String note){
course.setNote(note);
return this;
}
public CourseBuilder() {
this.course = new Course();
}
public Course build(){
return this.course;
}
}
调用测试:
public static void main(String[] args) {
Course course = new CourseBuilder()
.addName("a").addNote("note").addPpt("ppt").build();
System.out.println(course);
------------------------------------------------------------------------------------------
Course(name=a, ppt=ppt, video=null, note=note)
}
建造者的优缺点:
优点:
- 在建造者模式中, 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象 。 - 将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
- 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”。
缺点:
- 产生多余的builder 对象。
- 产品内部改变,建造者也需要改变。
应用
在JDK的Stringbuilder中,它提供append()方法为我们开放构造步骤,最后调用toString()完成String的构建过程。
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
public StringBuilder() {
super(16);
}
@Override
public StringBuilder append(CharSequence s) {
super.append(s);
return this;
}
···
}