- 模式定义
将一个复杂对象的创建与他的表示分离,使得同样的构建过程可以创建不同的表示
- 应用场景
1.需要生成的对象具有复杂的内部结构
2.需要生成的对象内部属性本身相互依赖
3.与不可变对象配合使用
- 优点
1、建造者独立,易扩展。
2、便于控制细节风险。
示例:
public class BuilderTest {
public static void main(String[] args) {
}
}
interface ProductBuilder{
void builderProductName(String productName);
void builderCompanyName(String companyName);
void builderPart1(String part1);
void builderPart2(String part2);
void builderPart3(String part3);
void builderPart4(String part4);
Product build();
}
class DefaultConcreateProductBuilder implements ProductBuilder{
private String productName;
private String companyName;
private String part1;
private String part2;
private String part3;
private String part4;
@Override
public void builderProductName(String productName) {
this.productName=productName;
}
@Override
public void builderCompanyName(String companyName) {
this.companyName=companyName;
}
@Override
public void builderPart1(String part1) {
this.part1=part1;
}
@Override
public void builderPart2(String part2) {
this.part2=part2;
}
@Override
public void builderPart3(String part3) {
this.part3=part3;
}
@Override
public void builderPart4(String part4) {
this.part4=part4;
}
@Override
public Product build() {
return new Product(this.productName,this.companyName,this.part1,this.part2,this.part3,this.part4);
}
}
class Director{
private ProductBuilder builder;
public Director(){
this.builder=builder;
}
public Product makeProduct(String productName,String companyName,String part1,
String part2, String part3,String part4){
builder.builderProductName(productName);
builder.builderCompanyName(companyName);
builder.builderPart1(part1);
builder.builderPart2(part2);
builder.builderPart3(part3);
builder.builderPart4(part4);
Product product = builder.build();
return product;
}
}
class Product{
private String productName;
private String companyName;
private String part1;
private String part2;
private String part3;
private String part4;
public Product(){
}
public Product(String productName, String companyName, String part1, String part2, String part3, String part4) {
this.productName = productName;
this.companyName = companyName;
this.part1 = part1;
this.part2 = part2;
this.part3 = part3;
this.part4 = part4;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getPart1() {
return part1;
}
public void setPart1(String part1) {
this.part1 = part1;
}
public String getPart2() {
return part2;
}
public void setPart2(String part2) {
this.part2 = part2;
}
public String getPart3() {
return part3;
}
public void setPart3(String part3) {
this.part3 = part3;
}
public String getPart4() {
return part4;
}
public void setPart4(String part4) {
this.part4 = part4;
}
@Override
public String toString() {
return "Product{" +
"productName='" + productName + ''' +
", companyName='" + companyName + ''' +
", part1='" + part1 + ''' +
", part2='" + part2 + ''' +
", part3='" + part3 + ''' +
", part4='" + part4 + ''' +
'}';
}
}
- 更多的是与不可变对象结合使用
public class BuilderTest2 {
public static void main(String[] args) {
Product.Builder builder = new Product.Builder().productName("yang").companyName("long").part1("xx");
builder.part3("oo");
Product product = builder.build();
System.out.println(product);
}
}
class Product {
private final String productName;
private final String companyName;
private final String part1;
private final String part2;
private final String part3;
private final String part4;
public Product(String productName, String companyName, String part1, String part2, String part3, String part4) {
this.productName = productName;
this.companyName = companyName;
this.part1 = part1;
this.part2 = part2;
this.part3 = part3;
this.part4 = part4;
}
static class Builder {
private String productName;
private String companyName;
private String part1;
private String part2;
private String part3;
private String part4;
public Builder productName(String productName){
this.productName=productName;
return this;
}
public Builder companyName(String companyName){
this.companyName=companyName;
return this;
}
public Builder part1(String part1){
this.part1=part1;
return this;
}
public Builder part2(String part2){
this.part2=part2;
return this;
}
public Builder part3(String part3){
this.part3=part3;
return this;
}
public Builder part4(String part4){
this.part4=part4;
return this;
}
Product build(){
return new Product(this.productName,this.companyName,this.part1,this.part2,this.part3,this.part4);
}
}
@Override
public String toString() {
return "Product{" +
"productName='" + productName + ''' +
", companyName='" + companyName + ''' +
", part1='" + part1 + ''' +
", part2='" + part2 + ''' +
", part3='" + part3 + ''' +
", part4='" + part4 + ''' +
'}';
}
}
- Spring源码中的应用
org.springframework.web.servlet.mvc.method.RequestMappingInfo
org.springframework.beans.factory.support.BeanDefinitionBuilder



