这个模式,我不大用,但今天还是记录一下,在创建Dialog时我是使用到,但不知其所然,只是按规则写。
AlertDialog.Builder builder=new AlertDialog.Builder(this);
AlertDialog dialog=builder.setTitle("标题")
.setIcon(android.R.drawable.ic_dialog_alert)
.setView(R.layout.myview)
.setPositiveButton(R.string.positive, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton(R.string.negative, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.create();
dialog.show();
以上就是用到了策略模式,他不是写个普通的构造函数直接创建对象,而是用builder来一步一步添加,好处可能是再创建时赋值比较清晰。
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
优点:
类有多个构造函数,能提更多的客户调用选择
缺点:
1、 类的作者不得不书写多种参数组合的构造函数,而且其中还需要设置默认参数值,这是一个需要细心而又枯燥的工作。
2、其次,这样的构造函数灵活性也不高,而且在调用时你不得不提供一些没有意义的参数值,
demo:
public class Person {
private String name;
private String age;
private String height;
private String weight;
private String address;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", height=" + height + ", weight=" + weight + ", address="
+ address + "]";
}
private Person(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.height = builder.height;
this.address = builder.address;
this.weight = builder.weight;
}
static class Builder {
private String name;
private String age;
private String height;
private String weight;
private String address;
public Builder address(String address) {
this.address = address;
return this;
}
public Builder weight(String weight) {
this.weight = weight;
return this;
}
public Builder age(String age) {
this.age = age;
return this;
}
public Builder name(String name) {
this.name = name;
return this;
}
public Builder height(String height) {
this.height = height;
return this;
}
public Person build() {
return new Person(this);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public static void main(String[] args) {
Person.Builder builder = new Person.Builder();
Person person = builder.name("hq").age("23").height("161").weight("50kg").address("nj").build();
System.out.println(person.toString());
}
}