为什么构建器模式使用new关键字虽然它的构造函数是私有的?

and*_*ter 1 java design-patterns

我看到代码Java Builder Pattern.除了下面的代码,一切都很好:

public static void main(String[] args) {
                NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
                                .calories(100).sodium(35).carbohydrate(27).build();
        }
Run Code Online (Sandbox Code Playgroud)

NutritionFacts构造函数是私有的,Builder内部类是静态的.因此,我们可以访问使用这个类NutritionFacts.Builder,但为什么它使用了新的关键字new NutritionFacts.Builder(240, 8)

Ada*_*ion 6

  • new NutritionFacts.Builder()创建一个新的Builder类实例,NutritionFacts因此营养因子的构造函数不相关(它可以是私有的,受保护的,公共的,包级别的)
  • Builder被内部定义一个静态类NutritionFacts,因此你不需要一个实例的NutritionFacts创建的新实例Builder类,并Builder可以调用任何顶级类的构造函数(private,protected和公众,包平)