JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design » Effective Java  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [Effective Java Reloaded] Static Factory和建構子的瓶頸
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2006-08-16 23:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
本文翻譯自JavaOne的Effective Java Reloaded,可以到JavaOne網頁看投影片

當要產生一個物件時,如果這個物件有超多的屬性時

1
2
3
4
new NutritionFacts(
  String name, int servingSize, int servingsPerCntnr,
  int totalFat, int saturatedFat, int transFat,
  int cholesterol, 15 more optional params!);


有時候產生一個物件時不需要這麼多參數,
但是難不成得提供2^n個建構子?

如果透過setter,遇到想產生immutable類別的物件時又不行

這時候就是靠Builder pattern了!!!

1.Builder的建構子只要"必須"的參數
2.其餘的屬性透過setter, 此setter回傳builder本身以達到chaining的效果

結果類似
1
2
NutritionFacts twoLiterDietCoke =
  new NutritionFacts.Builder("Diet Coke", 240, 8).sodium(1).build();


所以寫一個類別會如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class NutritionFacts {
  public static class Builder {
    public Builder(String name, int servingSize, int ervingsPerContainer){
    }
 
    public Builder totalFat(int val) {...
    }
 
    public Builder saturatedFat(int val) {...
    }
 
    public Builder transFat(int val) {...
    }
 
    public Builder cholesterol(int val) {...
    }
 
    ...// 15 more setters
    public NutritionFacts build() {
      return new NutritionFacts(this);
    }
  }
 
  private NutritionFacts(Builder builder) {
  }
}


koji edited on 2007-03-29 01:50
reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
話題樹型展開
人氣 標題 作者 字數 發文時間
4110 [Effective Java Reloaded] Static Factory和建構子的瓶頸 koji 1146 2006-08-16 23:56
3384 Re:[Effective Java Reloaded] Static Factory和建構子的瓶頸 ingramchen 34 2006-08-17 00:13
3339 Re:[Effective Java Reloaded] Static Factory和建構子的瓶頸 koji 21 2006-08-17 00:31
3267 Re:[Effective Java Reloaded] Static Factory和建構子的瓶頸 ulu 101 2006-08-19 22:38
3442 Re:[Effective Java Reloaded] Static Factory和建構子的瓶頸 ingramchen 255 2006-08-19 23:08
3417 Re:[Effective Java Reloaded] Static Factory和建構子的瓶頸 psychokiller 145 2006-11-14 14:31
» JWorld@TW »  Software Design » Effective Java

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8