디자인 패턴 - Builder Pattern
Table of Contents
출처 : https://www.tutorialspoint.com/design_pattern/builder_pattern.htm
빌더 패턴은 간단한 객체를 사용하고 단계별 접근 방식을 사용하여 복잡한 객체를 빌드합니다. 이 패턴은 객체를 생성하는 가장 좋은 방법 중 하나를 제공하기 때문에 이러한 유형의 디자인 패턴은 생성 패턴에 속합니다.
Builder 클래스는 최종 개체를 단계별로 빌드합니다. 이 빌더는 다른 개체와 독립적입니다.
Implementation
우리는 전형적인 식사가 햄버거와 차가운 음료일 수 있는 패스트푸드 레스토랑의 비즈니스 사례를 고려했습니다. 버거는 채식 버거 또는 치킨 버거일 수 있으며 포장지로 포장됩니다. 차가운 음료는 콜라 또는 펩시일 수 있으며 병에 포장됩니다.
햄버거와 차가운 음료와 같은 음식 항목을 나타내는 Item 인터페이스와 Item 인터페이스를 구현하는 구체적인 클래스와 음식 항목의 포장을 나타내는 Packing 인터페이스를 만들고 햄버거가 래퍼와 차가운 음료에 포장되기 때문에 Packing 인터페이스를 구현하는 구체적인 클래스를 만들 것입니다. 병으로 포장될 것입니다.
그런 다음 Item의 ArrayList와 MealBuilder가 있는 Meal 클래스를 만들어 Item을 결합하여 다양한 유형의 Meal 개체를 만듭니다. BuilderPatternDemo, 데모 클래스는 MealBuilder를 사용하여 Meal을 빌드합니다.
Step 1
식품 항목 및 포장을 나타내는 인터페이스 항목을 작성하십시오.
Item.java
1public interface Item {
2 public String name();
3 public Packing packing();
4 public float price();
5}
Packing.java
1public interface Packing {
2 public String pack();
3}
Step 2
Packing 인터페이스를 구현하는 구체적인 클래스를 만듭니다.
Wrapper.java
1public class Wrapper implements Packing {
2
3 @Override
4 public String pack() {
5 return "Wrapper";
6 }
7}
Bottle.java
1public class Bottle implements Packing {
2
3 @Override
4 public String pack() {
5 return "Bottle";
6 }
7}
Step 3
기본 기능을 제공하는 항목 인터페이스를 구현하는 추상 클래스를 만듭니다.
Burger.java
1public abstract class Burger implements Item {
2
3 @Override
4 public Packing packing() {
5 return new Wrapper();
6 }
7
8 @Override
9 public abstract float price();
10}
ColdDrink.java
1public abstract class ColdDrink implements Item {
2
3@Override
4public Packing packing() {
5 return new Bottle();
6}
7
8@Override
9public abstract float price();
10}
Step 4
Burger 및 ColdDrink 클래스를 확장하는 구체적인 클래스 생성
VegBurger.java
1public class VegBurger extends Burger {
2
3 @Override
4 public float price() {
5 return 25.0f;
6 }
7
8 @Override
9 public String name() {
10 return "Veg Burger";
11 }
12}
ChickenBurger.java
1public class ChickenBurger extends Burger {
2
3 @Override
4 public float price() {
5 return 50.5f;
6 }
7
8 @Override
9 public String name() {
10 return "Chicken Burger";
11 }
12}
Coke.java
1public class Coke extends ColdDrink {
2
3 @Override
4 public float price() {
5 return 30.0f;
6 }
7
8 @Override
9 public String name() {
10 return "Coke";
11 }
12}
Pepsi.java
1public class Pepsi extends ColdDrink {
2
3 @Override
4 public float price() {
5 return 35.0f;
6 }
7
8 @Override
9 public String name() {
10 return "Pepsi";
11 }
12}
Step 5
위에서 정의한 Item 개체가 있는 Meal 클래스를 만듭니다.
Meal.java
1import java.util.ArrayList;
2import java.util.List;
3
4public class Meal {
5 private List<Item> items = new ArrayList<Item>();
6
7 public void addItem(Item item){
8 items.add(item);
9 }
10
11 public float getCost(){
12 float cost = 0.0f;
13
14 for (Item item : items) {
15 cost += item.price();
16 }
17 return cost;
18 }
19
20 public void showItems(){
21
22 for (Item item : items) {
23 System.out.print("Item : " + item.name());
24 System.out.print(", Packing : " + item.packing().pack());
25 System.out.println(", Price : " + item.price());
26 }
27 }
28}
Step 6
Meal 객체 생성을 담당하는 실제 빌더 클래스인 MealBuilder 클래스를 생성합니다.
MealBuilder.java
1public class MealBuilder {
2
3 public Meal prepareVegMeal (){
4 Meal meal = new Meal();
5 meal.addItem(new VegBurger());
6 meal.addItem(new Coke());
7 return meal;
8 }
9
10 public Meal prepareNonVegMeal (){
11 Meal meal = new Meal();
12 meal.addItem(new ChickenBurger());
13 meal.addItem(new Pepsi());
14 return meal;
15 }
16}
Step 7
BuiderPatternDemo는 MealBuider를 사용하여 빌더 패턴을 보여줍니다.
BuilderPatternDemo.java
1public class BuilderPatternDemo {
2 public static void main(String[] args) {
3
4 MealBuilder mealBuilder = new MealBuilder();
5
6 Meal vegMeal = mealBuilder.prepareVegMeal();
7 System.out.println("Veg Meal");
8 vegMeal.showItems();
9 System.out.println("Total Cost: " + vegMeal.getCost());
10
11 Meal nonVegMeal = mealBuilder.prepareNonVegMeal();
12 System.out.println("\n\nNon-Veg Meal");
13 nonVegMeal.showItems();
14 System.out.println("Total Cost: " + nonVegMeal.getCost());
15 }
16}
Step 8
출력을 확인합니다.
1Veg Meal
2Item : Veg Burger, Packing : Wrapper, Price : 25.0
3Item : Coke, Packing : Bottle, Price : 30.0
4Total Cost: 55.0
5
6
7Non-Veg Meal
8Item : Chicken Burger, Packing : Wrapper, Price : 50.5
9Item : Pepsi, Packing : Bottle, Price : 35.0
10Total Cost: 85.5
이 시리즈의 게시물
- Tutorial 디자인 패턴 of Java
- Tutorial 디자인 패턴 of Java
- 디자인 패턴 - Overview
- 디자인 패턴 - Overview
- 디자인 패턴 - Factory Pattern
- 디자인 패턴 - Factory Pattern
- 디자인 패턴 - Abstract Factory Pattern
- 디자인 패턴 - Abstract Factory Pattern
- 디자인 패턴 - Singleton Pattern
- 디자인 패턴 - Singleton Pattern
- 디자인 패턴 - Builder Pattern
- 디자인 패턴 - Builder Pattern
- 디자인 패턴 - Prototype Pattern
- 디자인 패턴 - Prototype Pattern
- 디자인 패턴 - Bridge Pattern
- 디자인 패턴 - Bridge Pattern
- 디자인 패턴 - Filter Pattern
- 디자인 패턴 - Filter Pattern
- 디자인 패턴 - Composite Pattern
- 디자인 패턴 - Composite Pattern
- 디자인 패턴 - Proxy Pattern
- 디자인 패턴 - Proxy Pattern
- 디자인 패턴 - Mediator Pattern
- 디자인 패턴 - Mediator Pattern
- 디자인 패턴 - Useful Resources
- 디자인 패턴 - Useful Resources