-Builder pattern 은 간단한 객체를 이용해 단계별 접근법으로 복잡한 객체를 만듭니다.
-Builder class는 단계별로 최종 객체를 만듭니다. 이 Builder는 다른 객체와 독립적입니다.
Main 호출 부분
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 객체는 여러 객체를 통해 구성되며, 통합된 객체들에 대한 기능들을 제공하면 된다.
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
나머지 부분
public class Meal { private ArrayList- items=new ArrayList
- (); 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.java
public interface Item { public abstract String name(); public abstract Packing packing(); public abstract float price(); }
Burger.java
public abstract class Burger implements Item { @Override public Packing packing(){ return new Wrapper(); } }
ColdDrink.java
public abstract class ColdDrink implements Item { @Override public Packing packing(){ return new Bottle(); } }
나머지 부분
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 |