Effective Java Second Edition --- Builder Pattern

    如果类的构造器或者静态工厂中有多个参数,设计这种类时,Builder模式是一种不错的选择,特别是当大多数参数是可选的时候。

与使用传统的重载构造函数模式相比,使用Builder模式的客户端代码更易于阅读和编写,构造器也比javabeens更加安全。

代码如下:

 1 /**
 2  * Created by zhanga.fnst on 2016/3/14.
 3  */
 4 public class NutritionFacts {
 5     private final int servingSize;
 6     private final int servings;
 7     private final int calories;
 8     private final int flat;
 9     private final int sodium;
10     private final int carbohydrate;
11 
12     public  static class Builder{
13         //required parameters
14         private final int servingSize;
15         private final int servings;
16 
17         //Optional parameters
18         private  int calories = 0;
19         private  int flat = 0;
20         private  int sodium = 0;
21         private  int carbohydrate = 0;
22 
23         public Builder(int servingSize,int servings){
24             this.servingSize = servingSize;
25             this.servings = servings;
26         }
27 
28         public Builder calories(int val){
29             calories = val;
30             return this;
31         }
32 
33         public Builder flat(int val){
34             flat = val;
35             return this;
36         }
37 
38         public Builder carbohydrate(int val){
39             carbohydrate = val;
40             return this;
41         }
42 
43         public Builder sodium(int val){
44             sodium = val;
45             return this;
46         }
47 
48         public NutritionFacts build(){
49             return new NutritionFacts(this);
50         }
51     }
52 
53     private NutritionFacts(Builder builder){
54         servingSize = builder.servingSize;
55         servings = builder.servings;
56         calories = builder.calories;
57         flat = builder.flat;
58         sodium = builder.sodium;
59         carbohydrate = builder.carbohydrate;
60     }
61 }
View Code

main方法:

1 /**
2  * Created by zhanga.fnst on 2016/3/14.
3  */
4 public class TestMain {
5     NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).
6             calories(100).sodium(35).carbohydrate(27).build();
7 }

 

posted @ 2016-03-14 10:50  海阔天空990  阅读(210)  评论(0编辑  收藏  举报