장점

 - 코드의 가독성이 높다.

 - 생성하는 객체를 불변객체로 만들기 쉽다.

단점

 - 빌더의 생성비용이 소모된다.

 


이클립스에는 빌더를 따로 추가해주는 자동 생성 툴은 없다. 코드 작성이 까다롭다.

생성자에 필수 값을 넣고 빌더에 Optional한 값을 넣자.


  1. class NutiritionFactsBuilder {
  2.         private final int servingSize;
  3.         private final int servings;
  4.  
  5.         // optional
  6.         private final int calories;
  7.         private final int fat;
  8.         private final int sodium;
  9.         private final int carbohydrate;
  10.  
  11.         private NutiritionFactsBuilder(Builder builder) {
  12.                 servingSize = builder.servingSize;
  13.                 servings = builder.servings;
  14.                 calories = builder.calories;
  15.                 fat = builder.fat;
  16.                 sodium = builder.sodium;
  17.                 carbohydrate = builder.carbohydrate;
  18.         }
  19.  
  20.         @Override
  21.         public String toString() {
  22.                 return "NutiritionFactsBuilder [servingSize=" + servingSize
  23.                                 + ", servings=" + servings + ", calories=" + calories
  24.                                 + ", fat=" + fat + ", sodium=" + sodium + ", carbohydrate="
  25.                                 + carbohydrate + "]";
  26.         }
  27.  
  28.         public static class Builder {
  29.                 private final int servingSize;
  30.                 private final int servings;
  31.  
  32.                 // optional
  33.                 private int calories = 0;
  34.                 private int fat = 0;
  35.                 private int sodium = 0;
  36.                 private int carbohydrate = 0;
  37.  
  38.                 public Builder(int servingSize, int servings) {
  39.                         this.servingSize = servingSize;
  40.                         this.servings = servings;
  41.                 }
  42.  
  43.                 public Builder calories(int value) {
  44.                         calories = value;
  45.                         return this; // 체이닝 기법을 사용하기 위함.
  46.                 }
  47.  
  48.                 public Builder fat(int value) {
  49.                         fat = value;
  50.                         return this;
  51.                 }
  52.  
  53.                 public Builder sodium(int value) {
  54.                         sodium = value;
  55.                         return this;
  56.                 }
  57.  
  58.                 public Builder carbohydrate(int value) {
  59.                         carbohydrate = value;
  60.                         return this;
  61.                 }
  62.  
  63.                 public NutiritionFactsBuilder build() {
  64.                         return new NutiritionFactsBuilder(this);
  65.                 }
  66.  
  67.         }
  68. }
  69.  
  70. public class Ex3 {
  71.         public static void main(String... args) {
  72.                 NutiritionFactsBuilder obj = new NutiritionFactsBuilder.Builder(100,
  73.                                 200).calories(10).carbohydrate(300).fat(10).build();
  74.                 System.out.println(obj.toString());
  75.         }
  76. }


'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

+ Recent posts