建造者模式
将一个复杂对象的创建与他的表示分离,使得同意的构造过程可以创建不同的表示
应用场景
1、需要生成的对象具有复杂的内部结构
2、需要生成的对象内部属性本身相互依赖
3、与不可变对象配合使用
优点:
1、建造者独立,易扩展。
2、便于控制细节风险
/** * @author Yan * @date 2022-08-13 0:42 */ public class BuilderTest { public static void main(String[] args) { DefaultCreateProductBuilder defaultCreateProductBuilder = new DefaultCreateProductBuilder(); Director director = new Director(defaultCreateProductBuilder); System.out.println(director.makeProduct("xxx", "xxx", "part1", "part2", "part3", "part4")); } } 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 builder(); } class DefaultCreateProductBuilder 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 builder() { return new Product(this.productName,this.companyName,this.part1,this.part2,this.part3,this.part4); } } class Director{ private ProductBuilder builder; public Director(ProductBuilder builder) { 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 builder = this.builder.builder(); return builder; } } 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 + '\'' + '}'; } }