开发项目中,创建对象时,总是实例化对象,采用对象.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类中的构造函数中使用有参构造。