zoukankan      html  css  js  c++  java
  • Builder模式

    //Builder Pattern
    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)
            {
                calories = val;
                return this;
            }
    
            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;
        }
    
        public static void main(String[] args)
        {
            NutritionFacts cocaCola = new NutritionFacts.Builder(250,9).calories(100).sodium(12).carbohydrate(34).fat(10).build();
        }
    }

    刚照着书本敲完时,对main函数里面的静态内部类的实例化感到很疑惑:为什么静态的也需要实例化?

    查了一些资料后得知,static修饰的内部类不是说它是静态类,而是说它是外部类的静态成员,静态内部类不会依赖于外部类的实例。

    //内部类的实例化:
    Parent p = new Parent();
    Parent.Inner i = p.new Inner();
    
    //静态内部类的实例化:
    Parent.Inner i = new Parent.Inner();

    参考资料:

    内部类及静态内部类的实例化

    Java中静态类为什么也可以实例化

  • 相关阅读:
    实战分享 | 你知道这个死锁是怎么产生的吗?
    HDU 3016 线段树区间更新+spfa
    POJ 2828 线段树(想法)
    POJ 2184 01背包+负数处理
    HDU 2955 01背包(思维)
    HDU 1171 背包
    HDU 1561 树形DP入门
    POJ 3694 tarjan 桥+lca
    POJ 2446 最小点覆盖
    POJ 2226 最小点覆盖(经典建图)
  • 原文地址:https://www.cnblogs.com/kumu/p/7501335.html
Copyright © 2011-2022 走看看