使用場(chǎng)景:如果一個(gè)類的構(gòu)造需要很多參數(shù),但這些參數(shù)又不都是必須的。
Android開發(fā)中經(jīng)常使用的例子
new AlertDialog.Builder(this)
.setTitle("Design Patterns")
.setMessage("Builder is awesome")
.create();
實(shí)踐
- 假如一個(gè)User類定義如下
public class User {
private String firstName;
private String lastName;
private int age;
}
- 若想使用如下方法構(gòu)建
new User.Builder()
.setFirstName("Leonardo")
.setLastName("da Vinci")
.setAge(67)
.create();
- 內(nèi)部構(gòu)建一個(gè)Builder類
static class Builder {
private String firstName;
private String lastName;
private int age;
public Builder setFirstName(final String firstName) {
this.firstName = firstName;
return this;
}
public Builder setLastName(final String lastName) {
this.lastName = lastName;
return this;
}
public Builder setAge(final int age) {
this.age = age;
return this;
}
public User create() {
return new User(this);
}
}
- User類修改為
public class User {
private String firstName;
private String lastName;
private int age;
private User(final Builder builder) {
firstName = builder.firstName;
lastName = builder.lastName;
age = builder.age;
}
}