将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
public class Homework {
private String easyQc;//简答题目
private String normalQc;//正常题目
private String MediumQc;//中等难度题目
private String HardQc;//困难题目
public String getEasyQc() {
return easyQc;
}
public void setEasyQc(String easyQc) {
this.easyQc = easyQc;
}
public String getNormalQc() {
return normalQc;
}
public void setNormalQc(String normalQc) {
this.normalQc = normalQc;
}
public String getMediumQc() {
return MediumQc;
}
public void setMediumQc(String mediumQc) {
MediumQc = mediumQc;
}
public String getHardQc() {
return HardQc;
}
public void setHardQc(String hardQc) {
HardQc = hardQc;
}
}
public abstract class HomeworkBuilder {
public abstract HomeworkBuilder buildEasyQc(String easyQc);
public abstract HomeworkBuilder buildNormalQc(String normalQc);
public abstract HomeworkBuilder buildMediumQc(String mediumQc);
public abstract HomeworkBuilder buildHardQc(String hardQc);
public abstract Homework build();
}
public class ConcreateBuilder extends HomeworkBuilder {
private Homework homework;
public ConcreateBuilder(Homework homework) {
this.homework = homework;
}
@Override
public HomeworkBuilder buildEasyQc(String easyQc) {
homework.setEasyQc(easyQc);
return this;
}
@Override
public HomeworkBuilder buildNormalQc(String normalQc) {
homework.setNormalQc(normalQc);
return this;
}
@Override
public HomeworkBuilder buildMediumQc(String mediumQc) {
homework.setMediumQc(mediumQc);
return this;
}
@Override
public HomeworkBuilder buildHardQc(String hardQc) {
homework.setHardQc(hardQc);
return this;
}
@Override
public Homework build() {
return homework;
}
}
public class TestBuilder {
public static void main(String[] args) {
Homework homework = new Homework();
HomeworkBuilder homeworkBuilder = new ConcreateBuilder(homework);
homeworkBuilder.buildEasyQc("我是一道简单题目")
.buildNormalQc("我是一道标准难度题目")
.buildMediumQc("我是一道中等难度题目")
.buildHardQc("我是一道高难度题目");
homework = homeworkBuilder.build();
StringBuilder sb = new StringBuilder();
sb.append(null == homework.getEasyQc() ? "" : homework.getEasyQc() + ",");
sb.append(null == homework.getNormalQc() ? "" : homework.getNormalQc() + ",");
sb.append(null == homework.getMediumQc() ? "" : homework.getMediumQc() + ",");
sb.append(null == homework.getHardQc() ? "" : homework.getHardQc());
System.out.println("我的家庭作业有:" + sb.toString());
}
}
建造者和工厂模式的区别在于建造者更加灵活,支持自己搭配
优点
封装和拓展性好
缺点
产品变化时修改成本较大