장점
- 코드의 가독성이 높다.
- 생성하는 객체를 불변객체로 만들기 쉽다.
단점
- 빌더의 생성비용이 소모된다.
이클립스에는 빌더를 따로 추가해주는 자동 생성 툴은 없다. 코드 작성이 까다롭다.
생성자에 필수 값을 넣고 빌더에 Optional한 값을 넣자.
- class NutiritionFactsBuilder {
- private final int servingSize;
- private final int servings;
- // optional
- private final int calories;
- private final int fat;
- private final int sodium;
- private final int carbohydrate;
- private NutiritionFactsBuilder(Builder builder) {
- servingSize = builder.servingSize;
- servings = builder.servings;
- calories = builder.calories;
- fat = builder.fat;
- sodium = builder.sodium;
- carbohydrate = builder.carbohydrate;
- }
- @Override
- public String toString() {
- return "NutiritionFactsBuilder [servingSize=" + servingSize
- + ", servings=" + servings + ", calories=" + calories
- + ", fat=" + fat + ", sodium=" + sodium + ", carbohydrate="
- + carbohydrate + "]";
- }
- public static class Builder {
- private final int servingSize;
- private final int servings;
- // optional
- 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 value) {
- calories = value;
- return this; // 체이닝 기법을 사용하기 위함.
- }
- public Builder fat(int value) {
- fat = value;
- return this;
- }
- public Builder sodium(int value) {
- sodium = value;
- return this;
- }
- public Builder carbohydrate(int value) {
- carbohydrate = value;
- return this;
- }
- public NutiritionFactsBuilder build() {
- return new NutiritionFactsBuilder(this);
- }
- }
- }
- public class Ex3 {
- public static void main(String... args) {
- NutiritionFactsBuilder obj = new NutiritionFactsBuilder.Builder(100,
- 200).calories(10).carbohydrate(300).fat(10).build();
- System.out.println(obj.toString());
- }
- }
'java > design_pattern' 카테고리의 다른 글
Java Singleton 선언하는법 (0) | 2014.06.18 |
---|---|
Design Pattern 기본 원칙 (0) | 2014.06.18 |
Java Beans Pattern (0) | 2014.06.17 |
Telescoping Pattern (0) | 2014.06.17 |
프론트 컨트롤러 패턴 (0) | 2013.05.07 |