其他分享
首页 > 其他分享> > Android设计模式—建造者模式builder

Android设计模式—建造者模式builder

作者:互联网

1.builder模式(建造者模式)
builder模式的目的是为了将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

使用场景:
①相同方法,不同的执行顺序,产生不同的事件结果时;
②多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;
③产品类非常复杂,或者产品类中的调用顺序不同产生了不同效能,这个时候使用建造者模式非常合适。

优点:使用灵活,易于扩展;不用关心内部实现细节,只注重结果。
缺点:产生多余的Builder对象,消耗内存。

2.举例说明
如果我们有一个类Student,他有很多的属性,但是仅仅姓名和学号是必须赋值的,其他的属性都是可选项,代码如下:
public class Student {
private final int stuId;//必须
private final String name;//必须
private final int age;//可选
private final int gender;//可选
private final int address;//可选
…//还有很多可选属性
}
那么我们怎么来创建一个Student对象呢?我们看到每个属性都用final来修饰了,说明每个属性都要在构造方法中被初始化,我们又必须提供各种参数数量的构造方法,如果不使用建造者模式,会像如下写法:
public class Student {
private final int stuId;//必须
private final String name;//必须
private final int age;//可选
private final int gender;//可选
private final String address;//可选

public Student(int stuId,String name){
this(stuId,name,0,1,"");
}
public Student(int stuId,String name,int age){
this(stuId,name,age,1,"");
}
public Student(int stuId,String name,int age,int gender){
this(stuId,name,age,gender,"");
}
public Student(int stuId,String name,int age,int gender,String address){
this.stuId = stuId;
this.name = name;
this.age = age;
this.gender = gender;
this.address = address;
}
}
这样做确实可以解决我们的需求,但这还是可选参数不多的情况,如果有很多可选参数,我们就必须要写很多个构造函数,这将导致代码的可读性和维护性变差,更重要的是,当我们要用到这个类的时候会感觉无从下手,我到底应该用哪个构造方法呢?应该用两个参数的构造方法还是用三个参数的呢?如果我用两个参数的构造方法,那么可选参数的默认值是多少?
更棘手的是,如果我只想给Student对象设置address属性而不设置age和gender属性的话怎么办?我们显然还得再继续添加构造方法,或者我们只能调用全参的构造方法,然后给age和gender属性设置个默认值。
还有一点,我们看到stuId,age,gender都是int类型的,那么我们在创建Student对象时,哪一个int类型的对象代表stuId,哪一个代表age,这还进一步增加了使用成本。
为了解决这些问题,我们可以修改代码,只设置一个默认的无参构造方法,然后给每个属性添加getter和setter方法,代码如下:
public class Student {
private int stuId;//必须
private String name;//必须
private int age;//可选
private int gender;//可选
private String address;//可选
public Student(){

}

public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
这种方法看上去可读性和维护性比较好,当我们使用这个类的时候只需要创建一个空的对象并且设置我们需要的属性就可以了。比如这样:

标签:name,int,gender,age,public,Android,设计模式,stuId,builder
来源: https://blog.csdn.net/zenmela2011/article/details/120218326