Builder Pattern of Effective Java

If the constructor or static factory of a class has multiple input parameters, you may not remember the corresponding properties of so many parameters when calling Object(1.0, 2.0, 3.0, 4.0, 5.0, 6.0). Moreover, if a class has more properties that need to be initialized, its constructor must also need more (still need to look like more parameters in the front) You need to implement a constructor with 1, 2,,, arguments.

Then this method may be able to change your troubles.

1. The classes to be constructed are as follows:

public class NutritionFacts {   
    //Required parameters
    private final int servingSize;
    private final int servings;
    //Optional parameters
    private final int calories;
    private final int fat;
    private final int sodium;
    private final int carbohydrate;

    public static class Builder{//constructor
        //Required parameters
        private final int servingSize;
        private final int servings;
        //Optional parameters
        private int calories=0;
        private int fat       =0;
        private int sodium=0;
        private int carbohydrate=0;

        public Builder(int servingSzie,int serings) {
            this.servingSize=servingSzie;
            this.servings=serings;
        }
        public Builder calories(int calories) {
            this.calories=calories;
            return this;
        }
        public Builder fat(int fat) {
            this.fat=fat;
            return this;
        }
        public Builder sodium(int sodium) {
            this.sodium=sodium;
            return this;
        }
        public Builder carbohydrate(int carbohydrate) {
            this.carbohydrate=carbohydrate;
            return this;
        }
        public NutritionFacts builder() {
            return new NutritionFacts(this);
        }
    }
    public NutritionFacts(Builder builder) {
        servingSize=builder.servingSize;
        servings=builder.servings;
        calories=builder.calories;
        fat=builder.fat;
        sodium=builder.sodium;
        carbohydrate=builder.carbohydrate;
    }
}

2. Call the generated object as follows:

public class Main {

    public static void main(String[] args) {
        //Set each parameter separately,
        NutritionFacts nutritionFacts=new NutritionFacts.Builder(15, 20).
                calories(1).carbohydrate(2).fat(3).sodium(4).builder();
    }

}

Posted by pacognovellino on Sun, 05 Apr 2020 04:09:02 -0700