我们接着上一篇讲解的设计者模式,本篇将重点讲解一下另外一种建造者模式,其实在安卓开发中经常用到,比如AlertDialog的创建,设置标题等等
假如我们现在要创建一个对象,这个对象有下面几个属性,name,id,age,address,如果按照我们传统的对象要么会写多个构造方法,如下,这样创建起来不仅代码臃肿,而且不容易维护,看起来头大
private String name;
private String id;
private int age;
private String address;
public MyUser(String name) {
super();
this.name = name;
}
public MyUser(String name, String id) {
super();
this.name = name;
this.id = id;
}
public MyUser(String name, String id, int age) {
super();
this.name = name;
this.id = id;
this.age = age;
}
public MyUser(String name, String id, int age, String address) {
super();
this.name = name;
this.id = id;
this.age = age;
this.address = address;
}
或者使用get set方法进行赋值,这样也有同样的问题
private String name;
private String id;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
那么我们有没有好的方法来解决这个问题呢,答案当然是有的,就使用构建者模式,下面直接贴上代码,看起来很好理解
public class MyUser {
private final String name;
private final String id;
private final int age;
private final String address;
public MyUser(MyUserBuilder builder) {
super();
this.name = builder.name;
this.id = builder.id;
this.age = builder.age;
this.address = builder.address;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
public static class MyUserBuilder {
private String name;
private String id;
private int age;
private String address;
public MyUserBuilder name(String name) {
this.name = name;
return this;
}
public MyUserBuilder id(String id) {
this.id = id;
return this;
}
public MyUserBuilder age(int age) {
this.age = age;
return this;
}
public MyUserBuilder address(String address) {
this.address = address;
return this;
}
public MyUser build() {
return new MyUser(this);
}
}
@Override
public String toString() {
return "MyUser [name=" + name + ", id=" + id + ", age=" + age + ", address=" + address + "]";
}
}
测试类
public class MyUserBuilder {
public static void main(String[] args) {
MyUser.MyUserBuilder builder = new MyUser.MyUserBuilder();
builder.name("张三")
.age(10)
.id("01")
.address("河南")
.build();
System.out.println(builder.build().toString());
}
}
运行结果