-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBuilder.h
95 lines (74 loc) · 2.18 KB
/
Builder.h
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
//============================================================================
// Name : Builder.h
// Created on : 19.04.2020
// Author : Tokmakov Andrey
// Version : 1.0
// Copyright : Your copyright notice
// Description : Builder design pattern tests
//============================================================================
#ifndef BUILDER_DESIGN_PATTERN_TESTS__H_
#define BUILDER_DESIGN_PATTERN_TESTS__H_
#include <iostream>
#include <string>
#include <memory>
namespace Builder_Pattern_Tests {
using String = std::string;
using CString = const String&;
/** "Product" */
class Pizza {
private:
String dough;
String sauce;
String topping;
String name;
public:
Pizza();
virtual ~Pizza();
public:
virtual void setDough(CString dough) noexcept;
virtual void setSauce(CString sauce) noexcept;
virtual void setTopping(CString topping) noexcept;
virtual void setName(CString name) noexcept;
virtual String getName() const noexcept;
};
/** "Abstract Builder" */
class PizzaBuilder {
protected:
std::shared_ptr<Pizza> pizza;
public:
std::shared_ptr<Pizza> getPizza() noexcept;
virtual void createNewPizzaProduct();
virtual void setName() = 0;
virtual void buildDough() = 0;
virtual void buildSauce() = 0;
virtual void buildTopping() = 0;
};
/** "HawaiianPizzaBuilder" */
class HawaiianPizzaBuilder: public PizzaBuilder {
public:
virtual void setName() override;
virtual void buildDough() override;
virtual void buildSauce() override;
virtual void buildTopping() override;
};
/** SpicyPizzaBuilder: */
class SpicyPizzaBuilder : public PizzaBuilder {
public:
virtual void setName() override;
virtual void buildDough() override;
virtual void buildSauce() override;
virtual void buildTopping() override;
};
/** "Director" */
class Waiter {
private:
std::shared_ptr<PizzaBuilder> pizzaBuilder;
public:
void setPizzaBuilder(std::shared_ptr<PizzaBuilder> pizzaBuilder) noexcept;
std::shared_ptr<Pizza> getPizza() noexcept;
public:
void constructPizza() noexcept;
};
void Test();
};
#endif // (!BUILDER_DESIGN_PATTERN_TESTS__H_)