天天看点

Effective Java第二条:遇到多个构造器参数时要考虑用构建器

通过阅读《Effective Java 第2版》,着重对比了一下重叠构造器模式、JavaBean模式、构建器模式三种创建对象的模式,谨以此博文加深记忆;

一、重叠构造器模式

public class UserConstructorDo{

//必填

private int b_id; //主键

private String b_username;//用户名

//可选

private String b_idcard;//身份证号

private int b_sex;//性别 1 男 2 女

private int b_age;//年龄

public UserConstructorDo(int b_id, String b_username, String b_idcard, int b_sex, int b_age) {

this.b_id = b_id;

this.b_username = b_username;

this.b_idcard = b_idcard;

this.b_sex = b_sex;

this.b_age = b_age;

}

public UserConstructorDo(int b_id, String b_username) {

this(b_id,b_username,"");

}

public UserConstructorDo(int b_id, String b_username,String b_idcard) {

this(b_id,b_username,b_idcard,0);

}

public UserConstructorDo(int b_id, String b_username,String b_idcard,int b_sex) {

this(b_id,b_username,b_idcard,b_sex,0);

}

public int getB_id() {

return b_id;

}

public String getB_username() {

return b_username;

}

public String getB_idcard() {

return b_idcard;

}

public int getB_sex() {

return b_sex;

}

public int getB_age() {

return b_age;

}

//test

public static void main(String[] args) {

UserConstructorDo userConstructorDo = new UserConstructorDo(1,"zhangsan","234353454353434534");

System.out.println(userConstructorDo.getB_sex());

}

}

二、JavaBean模式

public class UserJavaBeanDo{

//必填

private int b_id; //主键

private String b_username;//用户名

//可选

private String b_idcard;//身份证号

private int b_sex;//性别 1 男 2 女

private int b_age;//年龄

public int getB_id() {

return b_id;

}

public void setB_id(int b_id) {

this.b_id = b_id;

}

public String getB_username() {

return b_username;

}

public void setB_username(String b_username) {

this.b_username = b_username;

}

public String getB_idcard() {

return b_idcard;

}

public void setB_idcard(String b_idcard) {

this.b_idcard = b_idcard;

}

public int getB_sex() {

return b_sex;

}

public void setB_sex(int b_sex) {

this.b_sex = b_sex;

}

public int getB_age() {

return b_age;

}

public void setB_age(int b_age) {

this.b_age = b_age;

}

public static void main(String[] args) {

UserJavaBeanDo userJavaBeanDo = new UserJavaBeanDo();

userJavaBeanDo.setB_id(1);

userJavaBeanDo.setB_username("zhangsan");

userJavaBeanDo.setB_sex(17);

System.out.println(userJavaBeanDo.getB_sex());

}

}

三、构建器模式(推荐使用)

public class UserBuilderDo{

//必填

private int b_id; //主键

private String b_username;//用户名

//可选

private String b_idcard;//身份证号

private int b_sex;//性别 1 男 2 女

private int b_age;//年龄

private UserBuilderDo(Builder build) {

this.b_id = build.b_id;

this.b_username = build.b_username;

this.b_idcard = build.b_idcard;

this.b_sex = build.b_sex;

this.b_age = build.b_age;

}

public static class Builder {

//必填

private int b_id; //主键

private String b_username;//用户名

//可选

private String b_idcard;//身份证号

private int b_sex;//性别 1 男 2 女

private int b_age;//年龄

public Builder(int b_id, String b_username) {

            this.b_id = b_id;

            this.b_username = b_username;

        }

public Builder b_idcard(String val){

this.b_idcard = val;

return this;

}

public Builder b_sex(int val){

this.b_sex = val;

return this;

}

public Builder b_age(int val){

this.b_age = val;

return this;

}

public UserBuilderDo build(){

return new UserBuilderDo(this);

}

}

public int getB_id() {

return b_id;

}

public String getB_username() {

return b_username;

}

public String getB_idcard() {

return b_idcard;

}

public int getB_sex() {

return b_sex;

}

public int getB_age() {

return b_age;

}

public static void main(String[] args) {

UserBuilderDo userBuilderDo = new UserBuilderDo.Builder(1, "zhangsan").b_idcard("23534534534").build();

System.out.println(userBuilderDo.getB_sex());

}

}