Java usa Builder para resolver el problema de demasiados parámetros de constructor

Notas de estudio efectivas de Java:

  En el constructor, si hay muchos parámetros que necesitan inicializarse, escribir un constructor para cada método de inicialización será demasiado pesado. Al usar el modo Constructor, puede resolver el problema de demasiados parámetros en el constructor.

Defina un constructor de clase interna, cuyas variables miembro sean consistentes con la clase externa;
defina un método similar a setter () para cada variable (opcional) en la
clase externa ; el constructor del constructor devuelve una instancia de la clase externa.

//Builder Pattern
public class NutritionFacts{
    
    
    public final int servingSize;
    public final int servings;
    public final int calories;
    public final int fat;
    public final int sodium;
    public final int carbohydrate;

    //静态内部类Builder
    public static class Builder{
    
    
        //必选变量
        private final int servingSize;
        private final int servings;

        //可选变量
        private final int calories = 0;
        private final int fat = 0;
        private final int sodium= 0;
        private final int carbohydrate= 0;

        //Builder的构造函数
        public Builder(int servingSize, int servings){
            this. servingSize = servingSize;
            this.servings = servings;
        }


        //Builder的成员方法返回其自身,所以可以链式调用
        //类似于setter()方法
        public Builder calories(int val){
            calories = val;
            return this;
        }
        public Builder fat(int val){
            fat = val;
            return this;
        }
        public Builder sodium(int val){
            sodium =  val;
            return this;
        }
        public Builder carbohydrate(int val){
            carbohydrate = val;
            return this;
        }

        //Builder的build方法,返回外部类的实例
        public NutritionFacts build(){
            return new NutritionFacts(this);
        }
    }

    //外部类的构造函数
    private NutritionFacts(Builder build){
        servingSize = build.servingSize;
        servings = build.servings;
        calories = build.calories;
        fat = build.fat;
        sodium = build.sodium;
        carbohydrate = build.carbohydrate;
    }
}

Ejemplo:

NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();

Supongo que te gusta

Origin blog.csdn.net/michael_f2008/article/details/77715075
Recomendado
Clasificación