진행중인 프로젝트들

Simple Factory 예제

로봇0301 2022. 12. 14. 20:50

간단한 팩토리(simple factory)

Pizza.h

#pragma once #include class Pizza { void prepare(); void bake(); void cut(); void box(); Pizza* orderPizza(std::string pizza_type); }; class CheesePizza : public Pizza { }; class GreekPizza : public Pizza { }; class PepperoniPizza : public Pizza { };

 

Pizza.cpp

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
#include "pizza.h"
 
Pizza* Pizza::orderPizza(std::string pizza_type)
{
    Pizza* var;
    if (pizza_type == "cheese")
    {
        var = new CheesePizza();
    }
    else if (pizza_type == "greek")
    {
        var = new GreekPizza();
    }
    else if (pizza_type == "pepperoni")
    {
        var = new PepperoniPizza();
    }
 
    var->prepare();
    var->bake();
    var->cut();
    var->box();
 
    return var;
}
cs

이 코드에서는 바뀔 수 있는 부분과 바뀌지 않는 부분이 분리되지 않았다.

따라서 바뀌는 부분을 캡슐화한다.

 

Pizza.h

1
 
cs

Pizza.cpp

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
#include "pizza.h"
 
PizzaStore::Pizza* PizzaStore::Pizza::orderPizza(std::string pizza_type)
{
    Pizza* var;
    
    var = factory->create(pizza_type);
 
    var->prepare();
    var->bake();
    var->cut();
    var->box();
 
    return var;
}
 
PizzaStore::Pizza* SimplePizzaFactory::create(std::string pizza_type)
{
    PizzaStore::Pizza * var = nullptr;
 
    if (pizza_type == "cheese")
    {
        var = new CheesePizza();
    }
    else if (pizza_type == "Greek")
    {
        var = new GreekPizza();
    }
    else if (pizza_type == "pepperoni")
    {
        var = new PepperoniPizza();
    }
    return var;
}
cs

 

변경되는 코드와 변경되지 않는 코드를 분리했다.