pattern2018. 7. 18. 17:38

-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
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
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
Posted by easy16