这种模式主要是为了应对一些复杂的对象创建。做过Android开发的朋友一定都用过AlterDialog,这就是Android中典型的Builder模式,其中AlterDialog有许多参数需要去配置,若使用构造方法去生成,则需要一大堆构造方法,所以引入了一个内部了Builder协助构建。
在Effective Java中就提到,在遇到多个构造器参数时,要考虑用到构建器。也许很多朋友也想到了,可以用一堆set方法去构建一个对象,这样就避免了大量的构造函数。但是在调用一条一条的set方法时,类可能处于一种变化的状态,也破坏了某些类的不可变性。使用Builder可以一次性构造一个需要的类,类似于构造方法,具有一定安全性,又避免了繁琐的构造方法。
简单实现:
public class Product {
private String name;
private String tag;
private String category;
private int price;
public static class Builder{
private String name;
private String tag;
private String category;
private int price = 0;
public Builder(String name,String category){
this.name = name;
this.category = category;
}
public Builder setTag(String tag){
this.tag = tag;
return this;
}
public Builder setPrice(int price){
this.price = price;
return this;
}
public Product build(){
return new Product(this);
}
}
private Product(Builder builder){
name = builder.name;
tag = builder.tag;
category = builder.category;
price = builder.price;
}
@Override
public String toString() {
return "name: " + name + " ,tag: " + tag + " ,category: " + category + " ,price: " + price;
}
}
测试类
public class test {
public static void main(String[] args) {
Product product = new Product.Builder("beef","meat").setTag("fresh").setPrice(100).build();
System.out.println(product);
}
}