起因:
最近在做統計計算,建立的實體中屬性比較多,都是一些數值,一開始是通過get、set方法進行指派,占用了很多業務代碼方法的長度,可讀性不太好,後來改用了添加構造器的方式,稍顯精簡了一點,但是每次指派的時候都都必須注意是不是對應上了。最後決定改用Bulider模式,确實好用很多。
下面通過一個實際的demo看一下效果
package com.github.xsh.demo.model;
/**
* @description:
* @date: 2019/5/16
**/
public class Student {
private int id;
private String name;
private String passwd;
private String sex;
private String address;
private Student(Builder builder) {
this.id = builder.id;
this.name = builder.name;
this.passwd = builder.passwd;
this.sex = builder.sex;
this.address = builder.address;
}
/**
* Builder
*/
public static class Builder {
private int id;
private String name;
private String passwd;
private String sex;
private String address;
public Builder(int id, String name) {
this.id = id;
this.name = name;
}
public Builder passwd(String passwd) {
this.passwd = passwd;
return this;
}
public Builder sex(String sex) {
this.sex = sex;
return this;
}
public Builder address(String address) {
this.address = address;
return this;
}
public Student build() {
return new Student(this);
}
}
@Override
public String toString() {
return String.format("%s[id=%s, name=%s, passwd=%s, sex=%s, address=%s]",
getClass().getSimpleName(), id, name, passwd, sex, address);
}
//為了使閱讀簡潔,此處省略getter setter
}
@Test
public void buliderTest(){
Student student = new Student.Builder(1,"jack")
.sex("男士")
.address("地球村")
.passwd("1232")
.build();
//先填充屬性再建構除對象,看上去是不是逼格滿滿
System.out.println(student);
}
複制
列印結果如下:
Student[id=1, name=jack, passwd=1232, sex=男士, address=地球村]
複制
最後做一下總結,什麼是
Bulider模式
:
不直接生成想要的對象,而是讓用戶端利用所有必要的參數調用構造器(或者靜
态工廠),得到一個 builder 對象 。 然後用戶端在 builder 對象上調用類似于 setter 的方法,來設定每個相關的可選參數。最後用戶端調用無參的build方法來生成通常是不可變的對象
參考閱讀:《Effective java(第3版)》第 2 條:遇到多個構造器參數時要考慮使用建構器
本人首發于個人公衆号:河岸飛流 歡迎訂閱
原文位址:https://mp.weixin.qq.com/s/Tr5rQGnDPti90hTwwHAKzQ
本文參與 騰訊雲自媒體分享計劃 ,歡迎熱愛寫作的你一起參與!
本文分享自作者個人站點/部落格
https://www.cnblogs.com/xieshuang/
複制
如有侵權,請聯系 [email protected] 删除。