Builder 模式的变种 类似于AlertDialog
2018-03-04 17:16
316 查看
package com.z.designsupportlibrarydemo; /** * Created by Administrator on 2018/3/4 0004. */ public class User { private final String mFirstName;//必选 private final String mLastName;//必选 private final String mGender;//可选 private final String mAge;//可选 private final String mPhoneNo;//可选 public User(Builder builder) { this.mFirstName = builder.firstName; this.mLastName = builder.lastName; this.mGender = builder.gender; this.mAge = builder.age; this.mPhoneNo = builder.phoneNo; } public String getmFirstName() { return mFirstName; } public String getmLastName() { return mLastName; } public String getmGender() { return mGender; } public String getmAge() { return mAge; } public String getmPhoneNo() { return mPhoneNo; } public static class Builder { private final String firstName;//必选 private final String lastName;//必选 private String gender;//可选 private String age;//可选 private String phoneNo;//可选 public Builder(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public Builder gender(String gender) { this.gender = gender; return this; } public Builder age(String age) { this.age = age; return this; } public Builder phoneNo(String phoneNo) { this.phoneNo = phoneNo; return this; } public User mbuilder() { return new User(this); } } @Override public String toString() { return "User{" + "mFirstName='" + mFirstName + '\'' + ", mLastName='" + mLastName + '\'' + ", mGender='" + mGender + '\'' + ", mAge='" + mAge + '\'' + ", mPhoneNo='" + mPhoneNo + '\'' + '}'; } }
public class FloatingActionButtonActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_floatingactionbutton);
findViewById(R.id.fab_check).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = new User.Builder("飞飞", "可爱").age("25").gender("家里蹲").phoneNo("110").mbuilder().toString();
Toast.makeText(FloatingActionButtonActivity.this, "我被点击了" + str, Toast.LENGTH_LONG).show();
}
});
}
}
从上面的代码可以看出一下几点:
User类的构造函数是私有的,意味着调用者不能直接实例化这个类。
User类是不可变的,所有必选的属性都是final的并且在构造函数中设置;同时,对属性值只提供getter函数。
Builder 使用Fluent Interface惯用法,使得类的使用者代码可读性更佳。
Builder 的构造函数只接收必选的属性值作为参数,并且只有必选的属性值设置为final,已此保证他们在构造函数中设置。
以上是学习<Android 高级进阶> 一书中得来....感谢....
相关文章推荐
- Android开发之Buidler模式初探结合AlertDialog.Builder讲解
- 从AlertDialog看Builder模式
- Builder模式设置AlertDialog字体大小、颜色等属性
- Builder模式设置AlertDialog字体大小、颜色等属性
- Builder模式设置AlertDialog字体大小、颜色等属性
- AlertDialog.Builder对话框类的用法
- AlertDialog.Builder(各种对话框实现)
- android AlertDialog.Builder
- AlertDialog.Builder对话框(2)之单选框,多选框,列表框和进度框
- Android Studio——AlertDialog.Builder使用方法
- 如何解决AlertDialog.Builder没有dismiss()方法
- 使用Builder模式封装Dialog和PopupWindow
- AlertDialog.Builder弹出自定义Layout窗口
- Android开发之AlertDialog.Builder…
- Android控件——AlertDialog.Builder().create;
- android源码解析--AlertDialog及AlertDialog.Builder
- AlertDialog.Builder对话框类的用法
- Android AlertDialog.Builder进入和退出动画效果设置
- AlertDialog.Builder setPositiveButton 点击时不关闭dialog
- Android中弹窗AlertDialog.Builder使用方法