java builder模式創建對象的使用


轉載注明出處 https://www.cnblogs.com/rolayblog/p/10552085.html

背景

由.net轉戰java,發現在C#語法中,我們新建一個對象賦值時經常這樣寫:

1 Person person=new Person(){
2     age=1,
3     name="Rolay",
4    ......................
5 }
View Code

看起很美觀,並且會提示我們哪些賦值了,哪些沒有賦值。但是在java中沒有看到這樣的寫法,於是近期的寫法全都是這樣:

1 Person person=new Person();
2 person.age=11;
3 person.name="Rolay';
4 .................................
View Code

這種寫法確實也能滿足需求,但是屬性一旦多了,或者其中有些限制必填或非必填時,很容易看錯或者寫掉。在讀effective java中看到builder模式對於創建對象的使用示例,順便記錄下來別讓自己忘了。

正文

 1 public class Person {
 2     private final String name;
 3     private final   String gender;
 4     private  String house;
 5     private  String age;
 6     private  String hight;
 7     private  Integer money;
 8 
 9     public Person(Builder builder)
10     {
11         this.name=builder.name;
12         this.gender=builder.gender;
13     }
14     @Override
15     public String toString()
16     {
17         return "姓名:"+this.name+",性別:"+this.gender;
18     }
19     public static class  Builder{
20         private final   String name;
21         private final String gender;
22         private  String house;
23         private  String age;
24         private  String hight;
25         private  Integer money;
26         public Builder(String name,String gender){
27             this.name=name;
28             this.gender=gender;
29         }
30         public Builder house(String house)
31         {
32             this.house=house;
33             return  this;
34         }
35         public Builder hight(String hight)
36         {
37             this.hight=hight;
38             return  this;
39         }
40         public Builder money(Integer money)
41         {
42             this.money=money;
43             return  this;
44         }
45         public Person build()
46         {
47             return new Person(this);
48         }
49     }
50 }
View Code

 

在Person類中定義一個內部類Builder,這個Builder內部類中的屬性要和Person中的相同,並且必須有的屬性要用final修飾,防止這些屬性沒有被賦值。然后內部類中定義了一個構造方法,傳入必須有的屬性。其他非必須的屬性都通過方法設置,每個方法都返回Builder對象自身。最后定義了一個build方法,將Builder對象傳入Person的私有構造方法,最終返回一個對象。重寫toString 返回兩個必填項組成的字符串。下面是調用示例:

1 Person person=new Person.Builder("張三","男")
2                 .hight("1.80").house("big  house").money(1000000).build();
3         System.out.println(person.toString());
View Code

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM