05.15 Java編程細節——應該在什麼時候使用構建器

很多人都知道構建者模式,可是很多人不知道該什麼時候使用構建者模式已經什麼時候優雅的使用構建者模式,

那麼筆者將在下文給大家通俗易懂的講解一下這兩個問題。需要深入研究java程序或者java架構的朋友請關注我哦,歡迎大家轉發點贊。

你是否寫過下面類似的代碼:

Java編程細節——應該在什麼時候使用構建器

當我想實例化一個名字叫“alvin”,性別男,但是不寫年齡,只有年級“1年級”,這個時候代碼就:不得不要為年齡這個參數傳遞值。如果新增一個只含年級的構造方法,那又將多出許多代碼,更嚴重的是,如果沒有一份詳盡的文檔或者註釋,看到如此多的構造方法將無從下手,這就是非常常見的重疊構造器。

Student student = new Student(“Alvin”, “男”, “0”, “1年級”);

當然還有另外一種方法,只有一個必填項的構造方法,而其他選填項利用setter方法傳遞。例如:

Student student = new Student(“Alvin”, “男”);
student.setGrade(“1年級”);

這實際上導致了在構造過程中JavaBean可能處於不一致的狀態,也就是說實例化對象本該是一氣呵成,但現在卻分割成了兩大步,這會導致它線程不安全,進一步引發不可預知的後果。

那麼我們提到較為“完美”的解決方案就是利用“Builder模式(建造者模式)”,有關此設計模式可以查看《建造者模式》。這種解決方案屬建造者模式的一種形式,其核心就是

不直接生成想要的對象,而是讓客戶端利用所有必要的參數調用構造器(或者靜態工廠),得到一個builder對象,再調用類似setter的方法設置相關可選參數。構建器模式如下所示:

Java編程細節——應該在什麼時候使用構建器

客戶端代碼:

Student student = new Student.Builder("kevin", 23).grade("1年級").build();

這樣的客戶端代碼很容易邊寫,並且便於閱讀。對於不瞭解的可能來說利用構建器模式編寫Student類不算易事,甚至代碼比重疊構造器的代碼更多。所以當可選參數在很多時,謹慎使用重疊構造器,而是使用構建器模式。

Java編程細節——應該在什麼時候使用構建器


分享到:


相關文章: