定義:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣地構(gòu)建過(guò)程可以創(chuàng)建不同的表示
使用場(chǎng)景示例
我們有一個(gè)產(chǎn)品,它包含了很多屬性
public class Product{
private String name;
private String num;
private String price;
private String weight;
}
在構(gòu)造的時(shí)候通常我們使用構(gòu)造函數(shù)進(jìn)行初始化,但是面對(duì)許多需要初始化的屬性并且有時(shí)并不需要初始化所有的屬性.?構(gòu)造函數(shù)就要重載,并且?guī)еL(zhǎng)長(zhǎng)的參數(shù),而建造模式就是把構(gòu)建分離出來(lái)
下面是代碼
public class Product {
private String name;
private String num;
private String price;
private String weight;
public Product(Builder builder) {
this.name = builder.name;
this.num = builder.num;
this.price = builder.price;
this.weight = builder.weight;
}
public static class Builder {
private String name;
private String num;
private String price;
private String weight;
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setNum(String num) {
this.num = num;
return this;
}
public Builder setPrice(String price) {
this.price = price;
return this;
}
public Builder setWeight(String weight) {
this.weight = weight;
return this;
}
public Product create() {
return new Product(this);
}
}
}
Product.Builder builder = new Product.Builder();
Product product = builder.setName("macbook").setNum("10").create();
這種模式隨處可見(jiàn),典型的AlertDialog
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.xxx, null);
builder.setView(view).setNegativeButton(DISMISS, null);
return builder.create();
}
還有URI
Uri uri = new Uri.Builder()
.scheme("xxx")
.path(String.valueOf(R.drawable.xxx))
.build();