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

创建对象之Builder模式

2015-02-01 13:50 316 查看
/*
* 创建对象的Builder模式
* Builder模式只适合创建对象时需要指定多个可选参数的场景.
* 客户端:
* 1:在客户端可以通过下面代码获取Person对象
* Person.PersonBuilder builder=new Person.PersonBuilder("111","王大少","男");
* 这里以选择可选参数年龄爱好为例子演示;
* Person person=builder.setAge(22).setHobby("reading").build();
*/
public class Person {
/*
* 必要的参数
* 身份证号、姓名、性别
* 声明为private避免外部不安全的修改
*/
private String id;
private String name;
private String sex;
/*
* 可选参数
* 年龄、电话、爱好、住址、学历;
*/
private int age;
private String phone;
private String hobby;
private String addr;
private String major;
/*
* Person类私有的构造函数,为什么要用私有的构造函数?
*/
private Person(PersonBuilder builder)
{
this.id=builder.id;
this.name=builder.name;
this.sex=builder.sex;
this.age=builder.age;
this.phone=builder.phone;
this.hobby=builder.hobby;
this.addr=builder.addr;
this.major=builder.major;
}
/*
* 调用setter,getter方法获取更改私有成员
*/
public void setId(String id) {
this.id=id;
}
public String getId() {
return id;
}
/*
* 这个PersonBuilder是专门用于创建Person对象的,
* 所以PersonBuilder类从属于Person类. 因此使用
* 内部类可以清晰的表述这种从属关系.使用"静态"
* 内部类则是为了在不存在Person对象时创建PersonBuilder对象
*/
public static class PersonBuilder{
/*
* 必要的参数
* 身份证号、姓名、性别
*/
private String id;
private String name;
private String sex;
/*
* 可选参数
* 年龄、电话、爱好、住址、学历;
*/
private int age;
private String phone;
private String hobby;
private String addr;
private String major;
/*
* 让客户端通过利用所有必要的参数调用构造函数得到一个builder对象
*/
public PersonBuilder(String id,String name,String sex)
{
this.id=id;
this.name=name;
this.sex=sex;
}
/*
* 调用无参的build方法创建Person对象
* 注意,在build方法调用前Person对象都没有被创建, 所以无需担心提前泄露的问题
*/
public Person build()
{
return new Person(this);
}
/*
* 调用类似于setter的方法来设置每个相关的可选参数
* 这里返回的是PersonBuilder对象,便于用级联的方式
* 设置可选参数,这样层次清晰,代码简洁
*/
public PersonBuilder setAge(int age) {
this.age = age;
return this;
}
public PersonBuilder setPhone(String phone) {
this.phone = phone;
return this;
}
public PersonBuilder setHobby(String hobby) {
this.hobby = hobby;
return this;
}
public PersonBuilder setAddr(String addr) {
this.addr = addr;
return this;
}
public PersonBuilder setMajor(String major) {
this.major = major;
return this;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐