• 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 }
  • 相关阅读:
    51nod 1254 最大子段和 V2
    51nod 1115 最大M子段和 V3
    51nod 1053 最大M子段和 V2
    51nod 1052 最大M子段和
    51nod 1051 最大子矩阵和
    web.config或App.config中AttachDBFilenamex相对路径问题
    [转帖]unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(主要讲区别)
    unity3d 第一人称脚本解释MouseLook
    unity3d-游戏实战突出重围,整合游戏
    unity3d-游戏实战突出重围,第四天 添加角色
  • 原文地址:https://www.cnblogs.com/maxiaofang/p/5274900.html
Copyright © 2020-2023  润新知