第二条:遇到多个构造器参数(Constructor Parameters)时要考虑用构建器(Builder)

 

构建器模式(Builder Pattern):

View Code
package edu.sjtu.erplab.builder;



public class NutritionFacts {



    private final int servingSize;

    private final int servings;

    private final int calories;

    private final int fat;

    private final int sodium;

    private final int carbohydrate;



    // 构造器,静态内部类

    public static class Builder {

        // 必要参数

        private final int servingSize;

        private final int servings;

        // 可选参数

        private int calories = 0;

        private int fat = 0;

        private int carbohydrate = 0;

        private int sodium = 0;



        public Builder(int servingSize, int servings) {

            this.servingSize = servingSize;

            this.servings = servings;

        }



        public Builder calories(int val) {

            calories = val;

            return this;//返回Builder类对象本身,以便把调用链接起来

        }



        public Builder fat(int val) {

            fat = val;

            return this;

        }



        public Builder carbohydrate(int val) {

            carbohydrate = val;

            return this;

        }



        public Builder sodium(int val) {

            sodium = val;

            return this;

        }



        public NutritionFacts build() {

            return new NutritionFacts(this);

        }

    }



    private NutritionFacts(Builder builder) {

        servingSize = builder.servingSize;

        servings = builder.servings;

        calories = builder.calories;

        fat = builder.fat;

        sodium = builder.sodium;

        carbohydrate = builder.carbohydrate;

    }

    

    @Override

    public String toString() {

        // TODO Auto-generated method stub

        return "["+

                "servingSize:"+servingSize+

                ",servings:"+servings+

                ",calories:"+calories+

                ",fat:"+fat+

                ",sodium:"+sodium+

                ",carbohydrate:"+carbohydrate+

                "]";

    }



    public static void main(String[] args) {

        NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)

                .calories(100).sodium(35).carbohydrate(27).build();

        

        System.out.println(cocaCola);

    }

}

 

你可能感兴趣的:(Constructor)