Skip to content

Commit 8732f5b

Browse files
committed
Imoproved
1 parent 07c96ac commit 8732f5b

File tree

7 files changed

+129
-1
lines changed

7 files changed

+129
-1
lines changed

Udemy/builder/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ project(builder)
33
#add_executable(motivation src/motivation_demo.cpp)
44
#add_executable(motivation_v1 src/motivation_improved_v1.cpp)
55
#add_executable(fluent_builder src/fluent_builder.cpp)
6-
add_executable(groovy_style_builder src/groovy_style_builder.cpp)
6+
#add_executable(groovy_style_builder src/groovy_style_builder.cpp)
7+
add_executable(builder_facet src/Person.cpp src/PersonBuilder.cpp)

Udemy/builder/src/Person.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
//
2+
// Created by sajith on 6/13/22.
3+
//
4+
5+
#include "Person.h"
6+
7+
PersonBuilder Person::create()
8+
{
9+
return PersonBuilder();
10+
}

Udemy/builder/src/Person.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//
2+
// Created by sajith on 6/13/22.
3+
//
4+
5+
#ifndef DESIGN_PATTERNS_PERSON_H
6+
#define DESIGN_PATTERNS_PERSON_H
7+
8+
#include <string>
9+
10+
class PersonBuilder;
11+
12+
class Person
13+
{
14+
std::string street_address;
15+
std::string post_code;
16+
std::string city;
17+
std::string company_name;
18+
std::string position;
19+
20+
int annual_income{0};
21+
22+
static PersonBuilder create();
23+
24+
friend class PersonBuilder;
25+
26+
friend class PersonJobBuilder;
27+
28+
friend class PersonAdressBuilder;
29+
30+
31+
};
32+
33+
34+
#endif //DESIGN_PATTERNS_PERSON_H
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//
2+
// Created by sajith on 6/18/22.
3+
//
4+
5+
#ifndef DESIGN_PATTERNS_PERSONADDRESSBUILDER_H
6+
#define DESIGN_PATTERNS_PERSONADDRESSBUILDER_H
7+
8+
class PersonAddressBuilder : public PersonBuilderBase
9+
{
10+
typedef PersonAddressBuilder Self;
11+
public:
12+
PersonAddressBuilder(Person &person) : PersonBuilderBase(person) {
13+
14+
}
15+
16+
};
17+
18+
#endif //DESIGN_PATTERNS_PERSONADDRESSBUILDER_H
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// Created by sajith on 6/13/22.
3+
//
4+
5+
#include "PersonBuilder.h"
6+
#include "PersonAddressBuilder.h"
7+
#include "PersonJobBuilder.h"
8+
9+
10+
PersonBuilderBase::PersonBuilderBase(Person &person) : person(person) {}
11+
12+
PersonBuilder::PersonBuilder() : PersonBuilderBase(p) {}
13+
14+
PersonAddressBuilder PersonBuilder::lives() const
15+
{
16+
return PersonAdressBuilder{person};
17+
}
18+
19+
PersonJobBuilder PersonBuilder::works() const
20+
{
21+
return PersonJobBuilder{person};
22+
}

Udemy/builder/src/PersonBuilder.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//
2+
// Created by sajith on 6/13/22.
3+
//
4+
5+
#ifndef DESIGN_PATTERNS_PERSONBUILDER_H
6+
#define DESIGN_PATTERNS_PERSONBUILDER_H
7+
8+
#include "Person.h"
9+
10+
class PersonJobBuilder;
11+
12+
class PersonAddressBuilder;
13+
14+
class PersonBuilderBase
15+
{
16+
protected:
17+
Person &person;
18+
19+
public:
20+
PersonBuilderBase(Person &person);
21+
};
22+
23+
class PersonBuilder : public PersonBuilderBase
24+
{
25+
Person p;
26+
public:
27+
PersonBuilder();
28+
29+
PersonAddressBuilder lives() const;
30+
31+
PersonJobBuilder works() const;
32+
};
33+
34+
35+
#endif //DESIGN_PATTERNS_PERSONBUILDER_H
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//
2+
// Created by sajith on 6/18/22.
3+
//
4+
5+
#ifndef DESIGN_PATTERNS_PERSONJOBBUILDER_H
6+
#define DESIGN_PATTERNS_PERSONJOBBUILDER_H
7+
8+
#endif //DESIGN_PATTERNS_PERSONJOBBUILDER_H

0 commit comments

Comments
 (0)