-Builder pattern 은 간단한 객체를 이용해 단계별 접근법으로 복잡한 객체를 만듭니다.
-Builder class는 단계별로 최종 객체를 만듭니다. 이 Builder는 다른 객체와 독립적입니다.
Main 호출 부분
1 2 3 4 5 6 7 8 | MealBuilder mb = new MealBuilder(); Meal mVegMeal=mb.prepareVegMeal(); Log.d( "hello" , "cost of Veg : " +mVegMeal.getCost()); mVegMeal.showItems(); Meal mChickenMeal = mb.prepareNonVegMeal(); Log.d( "hello" , "cost of Chicken : " +mChickenMeal.getCost()); mChickenMeal.showItems(); |
- MealBuilder를 통해 여러 객체를 하나의 Meal객체로 조립한다.
MealBuilder.java
-Meal 객체는 여러 객체를 통해 구성되며, 통합된 객체들에 대한 기능들을 제공하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class MealBuilder { public Meal prepareVegMeal(){ Meal meal = new Meal(); meal.addItem( new VegBurger()); meal.addItem( new Pepsi()); return meal; } public Meal prepareNonVegMeal(){ Meal meal = new Meal(); meal.addItem( new ChickenBurger()); meal.addItem( new Coke()); return meal; } } |
-Meal 객체는 여러 객체를 통해 구성되며, 통합된 객체들에 대한 기능들을 제공하면 된다.
Meal.java
Item.java
Burger.java
ColdDrink.java
나머지 부분
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class Meal { private ArrayList<item> items= new ArrayList<item>(); public void addItem(Item item){ items.add(item); } public float getCost(){ float cost = 0 .0f; for (Item item:items) { cost += item.price(); } return cost; } public void showItems(){ StringBuilder sb = new StringBuilder(); for (Item item: items ) { sb.append(item.name() + " ," ); } Log.d( "hello" , "result :" + sb.toString() ); } } </item></item> |
Item.java
1 2 3 4 5 | public interface Item { public abstract String name(); public abstract Packing packing(); public abstract float price(); } |
Burger.java
1 2 3 4 5 6 | public abstract class Burger implements Item { @Override public Packing packing(){ return new Wrapper(); } } |
ColdDrink.java
1 2 3 4 5 6 7 8 | public abstract class ColdDrink implements Item { @Override public Packing packing(){ return new Bottle(); } } |
나머지 부분
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | interface Packing { public String pack(); } public class Wrapper implements Packing { @Override public String pack() { return "Wrapper" ; } } public class Bottle implements Packing { @Override public String pack() { return "Bottle" ; } } public class Coke extends ColdDrink { @Override public String name() { return "Coke" ; } @Override public float price() { return 30 .0f; } } public class Pepsi extends ColdDrink { @Override public String name() { return "Fake Coke" ; } @Override public float price() { return 35 .0f; } } public class VegBurger extends Burger { @Override public String name() { return "Veg Burger" ; } @Override public float price() { return 25 .0f; } } public class ChickenBurger extends Burger { @Override public String name() { return "Chicken Burger" ; } @Override public float price() { return 50 .5f; } } |
결과 :
07-18 17:25:24.503 26158 26158 D hello : cost of Veg : 60.0
07-18 17:25:24.503 26158 26158 D hello : result :Veg Burger ,Fake Coke ,
07-18 17:25:24.503 26158 26158 D hello : cost of Chicken : 80.5
07-18 17:25:24.503 26158 26158 D hello : result :Chicken Burger ,Coke ,
출처:
https://www.tutorialspoint.com/design_pattern/builder_pattern.htm
'pattern' 카테고리의 다른 글
Adapter pattern (0) | 2018.07.19 |
---|---|
Prototype pattern (0) | 2018.07.18 |
Singleton pattern (0) | 2018.07.18 |
Abstract Factory Pattern (0) | 2018.07.18 |
factory pattern (0) | 2018.07.17 |