定义
建造者模式
建造者模式将一个复杂对象的构建和它的表示分离。当一个类的参数非常多或者构建过程需要遵循特定步骤时使用。
实现
经典建造者模式
public class Product {
String name;
String quality;
public void setName(String name) {
this.name = name;
}
public void setQuality(String quality) {
this.quality = quality;
}
}
public interface ProductBuilder {
void buildId();
void buildNamel;
Product build();
}
public class ProductABuilder implenments ProductBuilder {
private Product product = new Product();
public void buildName() {
product.setName("A");
}
public void buildQuality() {
product.setQuality("Good");
}
public Product build() {
return product;
}
}
public class Director {
public void Construct(ProductBuilder builder) {
builder.buildName();
builder.buildQuality();
}
}
Director director = new Director();
ProductBuilder builder = new ProductABuilder();
director.construct(builder);
Product product = builder.build();经典建造者模式(无Director变体)
public class Product {
String name;
String quality;
public void setName(String name) {
this.name = name;
}
public void setQuality(String quality) {
this.quality = quality;
}
}
public interface ProductBuilder {
void buildId();
void buildNamel;
Product build();
}
public class ProductABuilder implenments ProductBuilder {
private Product product = new Product();
public void buildName() {
product.setName("A");
}
public void buildQuality() {
product.setQuality("Good");
}
public Product build() {
return product;
}
}
ProductBuilder builder = new ProductABuilder();
builder.buildName();
builder.buildQuality();
Product product = builder.build();嵌套建造者模式
public class Product {
String name;
String quality;
public void setName(String name) {
this.name = name;
}
public void setQuality(String quality) {
this.quality = quality;
}
public class Builder {
private Product product = new Product();
public void setName(String name) {
product.setName(name);
}
public void setQuality(String quality) {
product.setQuality(quality);
}
public Product build() {
return product;
}
}
}
Product.Builder builder = new Product.Builder();
builder.setdName("A");
builder.setQuality("Good");
Product product = builder.build();流式建造者模式
public class Product {
String name;
String quality;
public void setName(String name) {
this.name = name;
}
public void setQuality(String quality) {
this.quality = quality;
}
public class Builder {
private Product product = new Product();
public Builder setName(String name) {
product.setName(name);
return this;
}
public Builder setQuality(String quality) {
product.setQuality(quality);
return this;
}
public Product build() {
return product;
}
}
}
Product product = new Product.Builder()
.setName("A")
.setQuality("Good")
.build();优点:封装性好、可读性好、易于精细控制构建步骤。
缺点:类数量增多。