Я читал о преимуществах шаблона компоновки здесь: http://drdobbs.com/java/208403883?pgno=2
Мне было интересно узнать о жизнеспособности следующего, который кажется более простым.
public class NutritionFactParams {
private int servingSize;
private int servings;
private int fat_ = 0;
private int sodium_ = 0;
NutritionFactParams(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
NutritionFactParams fat(int fat) {
this.fat_ = fat;
return this;
}
NutritionFactParams sodium(int sodium) {
this.sodium_ = sodium;
return this;
}
}
public class NutritionFacts {
public NutritionFacts(NutritionFactParams params) {
// copy values across, or store NutritionFactParams as member
}
}
public class Main {
public static void main(String args[]) {
NutritionFacts n = new NutritionFacts(new NutritionFactParams(1,2).fat(23).soduim(10));
}
}
Это в основном шаблон компоновщика, за исключением того, что конструктор NutritionFacts является публичным, а не приватным, у нас нет статического класса Builder внутри NutritionFacts, и в компоновщике нет метода build ().,Нет альтернативного конструктора или конструктора по умолчанию, поэтому вы не можете создавать NutritionFacts без предварительного создания NutritionFactsParams.