首先感谢前辈的经验
看对话框的创建吧 , 相信大家都用过的
AlertDialog.Builder builder = new AlertDialog.Builder(this);
AlertDialog alertDialog = builder
.setCancelable(false)
.setTitle("123")
.setIcon(R.mipmap.ic_launcher_round)
.create();
这个就是Builder模式的一个很好的例子
Builder模式可以用在对一个复杂对象的创建, 当你有很多必填的参数时候 , 直接写在构造方法中是不合理的 , 过多的参数容易让人搞混 , 而且可读性极差.
这时候 , 你可以考虑一下使用Builder模式了.
- Builder模式可以让对象有良好的封装性 , 客户端不必知道产品内部的组成细节
- 建造者独立 , 容易扩展 , 只需要修改内部类即可扩展.
1. 定义
将复杂对象的构建和表示进行分离 ,是的同样的构建过程可以不同的表示.
用过RxJava的老哥肯定能明白这句话的意思了 , 创建对象的过程就像是积木的拼接 , 不同的拼接方式得到的对象 , 功能也各不相同.
这里不介绍传统的Builder模式了,感觉有点复杂
2. 代码
代码也比较简单 这里直接贴上
public class UserBean {
//对象具有多个属性
private String firstName;
private String lastName;
private int age;
private String phone;
private String address;
//私有构造方法, 接收一个内部类对象
private UserBean(UserBuilder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.phone = builder.phone;
this.address = builder.address;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public String getPhone() {
return phone;
}
public String getAddress() {
return address;
}
//内部Builder类
public static class UserBuilder {
private String firstName;
private String lastName;
private int age;
private String phone;
private String address;
public UserBuilder() {
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder phone(String phone) {
this.phone = phone;
return this;
}
public UserBuilder address(String address) {
this.address = address;
return this;
}
public UserBuilder firstName(String firstName) {
this.firstName = firstName;
return this;
}
public UserBuilder lastName(String lastName) {
this.lastName = lastName;
return this;
}
public UserBean build() {
return new UserBean(this);
}
}
}
- 首先屏蔽了构造函数 , 使用private关键字
- 内部类的每个public函数都是用来设置各种属性的, 最终返回值都为this , 这样就可以通过链式调用 , 而调用之后的结果仍为本身
- 最后通过build()方法, 创建类对象 , 本质上就是调用了类的构造方法.
最后通过链式调用即可成功的创建出对象
UserBean build = new UserBean.UserBuilder().age(1)
.address("xxx")
.firstName("Ziya")
.build();
恩~~~挺清爽的
网友评论