java构造对象的方式

开发项目中,创建对象时,总是实例化对象,采用对象.set**的方法,当碰到对象的字段很多时,写的代码重复性高,所以总结了创建对象的几种方式,个人偏爱第一种

一种:构造器模式
例子(共3步):
1.构造一个Person对象,里面的字段name名字(必传参数),学号(必传参数),年龄(选传参数),班级(选 传参数)。
2.构建一个Builder内部类,Person类的必传参数作为Builder内部类有参构造函数的参数,其余Person类的 选传参数,在Builder内部类中单独构造。
3.构建Person类的有参构造函数(参数为内部类Builer)。
代码如下:

/**
 * @Description: model类里面采用Builder   构造器 构造对象
 * @author:Dxh 
 * @date:2018年1月2日 
 */
public class Person {
    
    /**
     * 用户名  必传参数
     */
    private String name;
    
    /**
     * 学号    必传参数
     */
    private Long classId;
    
    /**
     * 年龄     选传参数
     */
    private Integer age;
    
    /**
     * 班级     选传参数
     */
    private String grade;
    
    //内部类用于构建对象
    public static class Builder{
        
        private String name;
        private Long classId;
        private Integer age;
        private String grade;
        
        public Builder(String name, Long classId){
            this.name = name;
            this.classId = classId;
        }
        
        public Builder age(Integer ageVal){
            age = ageVal;
            return this;
        }
        
        public Builder grade(String gradeVal){
            grade = gradeVal;
            return this;
        }
        
        public Person build(){
            return new Person(this);
        }
        
    }
    
    //构造方法构造必传参数
    public Person(Builder builder){
        name = builder.name;
        classId = builder.classId;
        age = builder.age;
        grade = builder.grade;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", classId=" + classId + ", age=" + age + ", grade=" + grade + "]";
    }
    
}

客户端代码如下:

/**
 * @Description: 客户端使用构造器 构造对象
 * @author:Dxh 
 * @date:2018年1月3日 
 */
public class Client {
     
     public static void main(String[] args) {
         Person person = new Person.Builder("笨笨", 201405060321L).age(8).grade("物联网1班").build();
         System.out.println(person.toString());
    }
     
}

此时输出为:
Person [name=笨笨, classId=201405060321, age=8, grade=物联网]

此时可能会有疑问,我要获取对象的字段怎么办?
当然在Person类中实现get,set方法,因为构造器,只是提供一种构造对象的方法,减少set**字段时的代码量。

第二种方式:
在Person类中对每个字段实现get,set方法,之后在实例化对象时,单独字段采用set**的方法。

第三种方式:
在Person类中的构造函数中使用有参构造。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值