美文网首页
Builder模式创建实例

Builder模式创建实例

作者: 小贱嘎嘎 | 来源:发表于2017-08-31 18:59 被阅读0次

    在java中实例化一个类的对象一般有三种模式,重叠构造器模式,javabean模式,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 NutritionFacts(int servingSize, int servings) {
            this(servingSize, servings, 0);
        }
    
        public NutritionFacts(int servingSize, int servings, int calories) {
            this(servingSize, servings, calories, 0);
        }
    
        public NutritionFacts(int servingSize, int servings, int calories, int fat) {
            this(servingSize, servings, calories, fat, 0);
        }
    
        public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
            this(servingSize, servings, calories, fat, sodium, 0);
        }
    
        public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
            this.servingSize = servingSize;
            this.servings = servings;
            this.calories = calories;
            this.fat = fat;
            this.sodium = sodium;
            this.carbohydrate = carbohydrate;
        }
    }
    

    这种方式在有大量参数的时候代码会变得很不直观,代码可读性太差。

    javabean模式

    就是给定一个默认构造器,然后对所有属性提供setter,getter方法。
    实例化与属性赋值在不同语句中,所以此种模式线程不安全

    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 sodium = 0;
            private int carbohydrate = 0;
    
            public Builder(int servingSize, int servings) {
                this.servingSize = servingSize;
                this.servings = servings;
            }
        
            public Builder calories(int val){
                this.calories = val;
                return this;
            }
    
            public Builder fat(int val){
                this.fat = val;
                return this;
            }
    
            public Builder sodium(int val){
                this.sodium = val;
                return this;
            }
    
            public Builder carbohydrate(int val){
                this.carbohydrate = val;
                return this;
            }
    
        }
    
        public NutritionFacts(Builder builder) {
            servingSize = builder.servingSize;
            servings = builder.servings;
            calories = builder.calories;
            fat = builder.fat;
            sodium = builder.sodium;
            carbohydrate = builder.carbohydrate;
        }
    }
    

    使用方法:

    NutritionFacts.Builder builder = new NutritionFacts.Builder(2, 3)
                .calories(1)
                .carbohydrate(2)
                .fat(4)
                .sodium(3);
    NutritionFacts nutritionFacts = builder.build();

    相关文章

      网友评论

          本文标题:Builder模式创建实例

          本文链接:https://www.haomeiwen.com/subject/huccjxtx.html