-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpizzaBuilder.cpp
135 lines (131 loc) · 2.34 KB
/
pizzaBuilder.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
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
//Product
//it is the final product which will be made by builder
class Pizza
{
public:
void setDough(const string& dough)
{
p_dough=dough;
}
void setSauce(const string& sauce)
{
p_sauce=sauce;
}
void setTopping(const string& topping)
{
p_topping=topping;
}
void setPrice(const float &price)
{
p_price=price;
}
void open()
{
cout<<"Pizza with "<<p_dough<<" dough "<<p_sauce<<" sauce and "<<p_topping<<" topping having price "
<<p_price<<endl;
}
private:
string p_topping;
string p_sauce;
string p_dough;
float p_price;
};
//Abstract Builder
//An interface which will be implemented by all builder classes
class PizzaBuilder
{
public:
virtual ~PizzaBuilder(){};
Pizza *getPizza()
{
return p_pizza;
}
void createNewPizzaProduct()
{
p_pizza=new Pizza;
}
virtual void buildDough()=0;
virtual void buildSauce()=0;
virtual void buildTopping()=0;
virtual void buildPrice()=0;
protected:
Pizza *p_pizza;
};
class PeppyPaneerPizza:public PizzaBuilder
{
public:
virtual ~PeppyPaneerPizza(){};
virtual void buildDough()
{
p_pizza->setDough("cross");
}
virtual void buildSauce()
{
p_pizza->setSauce("mild");
}
virtual void buildTopping()
{
p_pizza->setTopping("paneer+onion");
}
virtual void buildPrice()
{
p_pizza->setPrice(156.25);
}
};
class FarmHousePizza : public PizzaBuilder
{
public:
virtual ~FarmHousePizza(){};
virtual void buildDough()
{
p_pizza->setDough("pan baked");
}
virtual void buildSauce()
{
p_pizza->setSauce("hot");
}
virtual void buildTopping()
{
p_pizza->setTopping("Pepperoni+salami");
}
virtual void buildPrice()
{
p_pizza->setPrice(350.28);
}
};
///Director
//This will direct the builder instanses to build different types of pizza
class Director
{
public:
void openPizza()
{
p_pizzaBuilder->getPizza()->open();
}
void makePizza(PizzaBuilder* pb)
{
p_pizzaBuilder=pb;
p_pizzaBuilder->createNewPizzaProduct();
p_pizzaBuilder->buildDough();
p_pizzaBuilder->buildSauce();
p_pizzaBuilder->buildTopping();
p_pizzaBuilder->buildPrice();
}
private:
PizzaBuilder *p_pizzaBuilder;
};
int main()
{
Director cook;
FarmHousePizza farmHousePizza;
PeppyPaneerPizza peppyPaneerPizza;
cook.makePizza(&farmHousePizza);
cook.openPizza();
cook.makePizza(&peppyPaneerPizza);
cook.openPizza();
return 0;
}