-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathbuilder.cpp
121 lines (101 loc) · 2.47 KB
/
builder.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
#include <iostream>
#include <string>
using namespace std;
class Wheel{
public:
int size;
};
class Engine{
public:
int horsepower;
};
class Body{
public:
string shape;
};
class Car{
public:
Wheel* wheels[4];
Engine* engine;
Body* body;
void specifications(){
cout<<"Body: "<<body->shape<<endl;
cout<<"Engine Horsepower: "<<engine->horsepower<<endl;
cout<<"Tire Size: "<<wheels[0]->size<<endl;
}
};
class Builder{
public:
virtual Wheel* getWheel() = 0;
virtual Engine* getEngine() = 0;
virtual Body* getBody() = 0;
};
class JeepBuilder : public Builder{
public:
Wheel* getWheel(){
Wheel* wheel = new Wheel();
wheel->size = 22;
return wheel;
}
Engine* getEngine(){
Engine* engine = new Engine();
engine->horsepower = 400;
return engine;
}
Body* getBody(){
Body* body = new Body();
body->shape = "SUV";
return body;
}
};
class NissanBuilder : public Builder {
public:
Wheel* getWheel(){
Wheel* wheel = new Wheel();
wheel->size = 16;
return wheel;
}
Engine* getEngine(){
Engine* engine = new Engine();
engine->horsepower = 85;
return engine;
}
Body* getBody(){
Body* body = new Body();
body->shape = "hatchback";
return body;
}
};
class Director {
Builder* builder;
public:
void setBuilder(Builder* newBuilder){
builder = newBuilder;
}
Car* getCar(){
Car* car = new Car();
car->body = builder->getBody();
car->engine = builder->getEngine();
car->wheels[0] = builder->getWheel();
car->wheels[1] = builder->getWheel();
car->wheels[2] = builder->getWheel();
car->wheels[3] = builder->getWheel();
return car;
}
};
int main(){
Car* car;
Director director;
JeepBuilder jeepBuilder;
NissanBuilder nissanBuilder;
cout<<"Jeep"<<endl;
director.setBuilder(&jeepBuilder);
car = director.getCar();
car->specifications();
cout<<endl;
cout<<"Nissan"<<endl;
director.setBuilder(&nissanBuilder);
car = director.getCar();
car->specifications();
return 0;
}