您的位置:首页 > 产品设计 > UI/UE

Android设计模式--Builder模式

2016-06-20 12:03 501 查看
假设我们有一个Dog类,我们通过Dog类来创建很多的Dog,并且这个Dog有很多属性,如:name,sex,age,weight并且允许这些属性可以设置为null

public class Dog {
private String name;
private String sex;
private int age;
private float weight;
public Dog() {
super();
// TODO Auto-generated constructor stub
}
public Dog(String name) {
super();
this.name = name;
}
public Dog(String name, String sex) {
super();
this.name = name;
this.sex = sex;
}
public Dog(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public Dog(String name, String sex, int age, float weight) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.weight = weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
}


然而在别人也需要使用第四个构造函数Dog dog = Dog(“wangcai”, male, 9, 20);时,别人单纯的从构造方法很难看出各个参数是何种含义,此时需要打开构造函数看看才知道,当我们在此方法中增加一个静态的内部类Builder,并修改Dog的构造方法,此时代码的可读性就会提升很多。

public class Dog {
private String name;
private String sex;
private int age;
private float weight;
private Dog(Builder builder) {
super();
this.name = builder.name;
this.sex = builder.sex;
this.age = builder.age;
this.weight = builder.weight;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}

//创建一个Builder的静态类
static class Builder{
private String name;
private String sex;
private int age;
private float weight;

public Builder name(String name){
this.name = name;
return this;
}

public Builder sex(String sex){
this.sex = sex;
return this;
}

public Builder age(int age){
this.age = age;
return this;
}
public Builder weight(float weight){
this.weight = weight;
return this;
}
public Dog build(){
return new Dog();
}
}
}


从代码中可以看出Dog的成员变量和Builder的成员变量一模一样,并且我们在Dog的构造中传入的是Builder对象,把Builder中的成员变量赋值给Dog中的成员变量,Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身(this),另外通过在Builder类中创建一个build方法或create返回Dog类对象。

因此我们可以在创建Dog对象时可以这样了:

Dog.Builder builder= new Dog.Builder();

Dog dog = builder.name(“wangcai”)

.sex(“male”)

.age(9)

.weight(20)

.build();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: