정적 팩터리 메서드, 생성자의 제약

public class NutritionFacts {
    private final int servingSize;
    private final int calories;
    private final int transFat;
    private final int saturatedFat;
    private final int protein;
    private final int sodium;
}

대안

  1. 점층적 생성자 패턴

    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;
    	}
    }
    
  2. 자바빈즈 패턴

    NutritionFacts cocaCola = new NutritionFacts();
    cocaCola.setSomething1();
    cocaCola.setSomething2();
    

빌더 패턴

빌더 패턴의 단점