-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 |