pattern2018. 7. 18. 17:38

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