定义


建造者模式

建造者模式将一个复杂对象的构建和它的表示分离。当一个类的参数非常多或者构建过程需要遵循特定步骤时使用。

实现


经典建造者模式

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();

优点:封装性好、可读性好、易于精细控制构建步骤。
缺点:类数量增多。