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

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 高级进阶> 一书中得来....感谢....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: