Java复杂对象的一种创建方式

在Java中我们经常会创建很多对象,以创建一个人为例,必需的属性是姓名和年龄,其他的诸如电话,地址等是非必须的,那么我们通常的做法是定义这样一个java bean这样:

public class People {

    private String  name;
    private Integer age;
    private String  gender;
    private String  address;
    private String  phone;

    public People(String name, Integer age){
        this.name = name;
        this.age = age;
    }

    public People(String name, Integer age, String gender, String address, String phone){
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.address = address;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

}

 

然后通过构造方法和set方法来生成所需要的实例:

People p = new People("zhang san", 12);
p.setAddress("China");
p.setPhone("1234567");

 

当对象比较复杂,属性比较多的时候,需要写很多构造方法,或者调用很多set方法.

 

一种改进的方法可以这样:

public class People {

    private String  name;
    private Integer age;
    private String  gender;
    private String  address;
    private String  phone;

    public People(PeopleBuilder builder){
        this.name = builder.name;
        this.age = builder.age;
        this.gender = builder.gender;
        this.address = builder.address;
        this.phone = builder.phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public static class PeopleBuilder {

        private String  name;
        private Integer age;
        private String  gender;
        private String  address;
        private String  phone;

        public PeopleBuilder(String name, Integer age){
            this.name = name;
            this.age = age;
        }

        public PeopleBuilder gender(String gender) {
            this.gender = gender;
            return this;
        }

        public PeopleBuilder address(String address) {
            this.address = address;
            return this;
        }

        public PeopleBuilder phone(String phone) {
            this.phone = phone;
            return this;
        }
        
        public People build() {
            People p = new People(this);
            return p;
        }

    }

}

 

生成People实例:

People p = new People.PeopleBuilder("li si", 32).address("USA").phone("12345").build();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值